كيفية تمرير الحجج إلى تطبيق وحدة التحكم إذا كان يعمل بالفعل؟

StackOverflow https://stackoverflow.com/questions/3257311

سؤال

يمكنني استخدام تطبيق وحدة التحكم في نظام التشغيل Windows Mobile للتعامل مع اعتراض الرسالة الواردة.في نفس تطبيق وحدة التحكم، أقبل المعلمات (String Args []) استنادا إلى المعلمات، قم بتسجيل الرسالة Interceptor.

interceptortype هو Enum

giveacodicetagpre.

قمت بإجراء هذا تطبيق وحدة التحكم لأنني أريد أنه استمر في تشغيله في الخلفية واعتراض الرسائل الواردة.

هذا يعمل بشكل جيد لأول مرة.لكن المشكلة هي أنه يجب علي الاستمرار في استدعاء طريقة AddINterception لإضافة قواعد الاعتراض اللاحقة.هذا يجعل تطبيق وحدة التحكم يبدأ مرارا وتكرارا في كل مرة أضيف قاعدة.كيف يمكنني تشغيل هذا مرة واحدة فقط وإضافة المزيد من قواعد اعتراض الرسائل؟

هل كانت مفيدة؟

المحلول

منذ أن لديك بالفعل طريقة في مكانها لاستدعاء موجه الأوامر مرة واحدة، قم بتحديث منطقك مع بعض الحلقات البسيطة حتى تتمكن من تمرير أوامر N.

تحرير: لقد كتبت ذلك مثالا قابلا للتجميع تماما لإظهارك بالضبط ما أتحدث عنه.لاحظ كيف يمكن استدعاء عملية الطفل أي عدد من المرات دون إعادة إطلاق.هذا ليس مجرد إطلاق سطر الأوامر بسيطة مع الحجج التي يتم تمريرها لأن هذه الفكرة ستؤدي إلى عمليات X وهي بالضبط ما لا تريده.

العملية الأصل: (واحد مع system.diagnostics.process)

giveacodicetagpre.

عملية الطفل:

giveacodicetagpre.

لاحظ أن Codeplex يحتوي على مكتبة الخدمة المدارة .

نصائح أخرى

تحرير

يبدو أن الأشخاص غير مؤلمين لسؤالك (أو أنا) حتى هنا بعض التوضيح حول كيفية رؤية المشكلة.

لديك تطبيق وحدة تحكم يأخذ في معلمات سطر الأوامر. تستخدم هذه المعلمات لشيء ما (ما هو غير ذي صلة في الواقع). تريد أن تكون قادرا على إضافة معلمات بعد تشغيل التطبيق بالفعل عن طريق استدعاء التطبيق مع Args سطر الأوامر الجديد.

ما يحدث هو أنه عند استدعاء التطبيق في أي وقت بعد تي أولا، يبدأ مثيل جديد للعملية بدلا من وسيطات سطر الأوامر التي تذهب إلى التطبيق الموجود قيد التشغيل بالفعل.

تحرير نهاية

الحل واضح إلى حد ما ويتطلب قطعتين.

  1. تحتاج إلى اسمه mutex. لأي سبب (ضعيف)، لا يعرض CF إصدارا من Mutex الذي يأخذ اسما، لذلك يجب عليك P / Invoke CreateMuteX أو استخدم مكتبة (مثل SDF) الذي يحتوي بالفعل عليه. يحتاج تطبيقك إلى إنشاء Mutex عند بدء التشغيل والتحقق لمعرفة ما إذا كان موجودا بالفعل. إذا لم يكن الأمر كذلك أول مثيل تشغيل وتشغيله بشكل طبيعي. إذا كانت Mutex موجودة، فأنت بحاجة إلى اجتياز سطر الأوامر الخاص بك إلى الشخص الذي يعمل بالفعل عبر قائمة انتظار P2P ثم يخرج ببساطة.

  2. بعد التحقق من mutex، فإن المثيل الأول يطرد مؤشر ترابط عامل. يستمع هذا الخيط في قائمة انتظار P2P للرسائل. عندما يأتون، تتعامل معها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top