سؤال

عندما أستخدم Vsts Debugger لمعرفة خصائص مثيل الفصل Process, ، يتم تمييز العديد من الخصائص InvalidOperationException. وبعد لماذا ا؟ أفعل أي شيء خطأ؟

أنا أستخدم Vsts 2008 + C # + .NET 2.0 لتطوير تطبيق وحدة التحكم.

هنا هو رمزي:

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "IExplore.exe";
myProcess.StartInfo.Arguments = @"www.google.com";
myProcess.StartInfo.Verb = "runas";
myProcess.Start();

وقطة لقطة من مصحح الأخطاء:

enter image description here

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

المحلول

هل بدأت فعلا العملية عند أخذ صورة مصحح الأخطاء؟ هذه هي لقطة الشاشة أتوقع أن أرى قبل Start() يتم استدعاء الطريقة.

لاحظ أن النمط المشترك هو إنشاء ProcessStartInfo, ، ملء ذلك، ثم اتصل بالثابت Process.Start(startInfo) طريقة. هذا يجعلها أبسط من الناحية النظرية: أنت لا ترى Process كائن حتى يتم البدء.

نصائح أخرى

نعم، هذا السلوك المتوقع ويتم توثيقه بوضوح في MSDN أيضا.

على سبيل المثال، يمكن للعقار Process.BasePriority رمي استثناء InvalidoperationException عندما تكون العملية قد خرجت أو لم تبدأ العملية (انظر المزيد من التفاصيل في MSDN.).

يتم تمييز العديد من الخصائص مع InvalistoperationException لأنه حتى تبدأ العملية. لا يرتبط كائن "MyProcess" بأي عملية قيد التشغيل وبالتالي لا يمكنها الحصول على المعلومات.

حاول إضافة هذه العبارات، بعد بدء التعليمات البرمجية

if (myProcess != null)  
{
  myProcess.WaitForExit();
   //or any other statements for that matter
}

الآن، عندما تكون داخل كشف الحساب، سيتمكن Debugger Vsts من إظهار معظم الخصائص المرتبطة بالكائن MyProcess. يحدث هذا لأنه، يرتبط كائن MyProcess الآن بعملية قيد التشغيل "Iexplore.exe".

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