كيفية منع ترك أيقونة في علبة النظام على الخروج؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

وبرنامجي يضع رمز في علبة النظام لأن المستخدم قد تقليل إليها. ومع ذلك، إذا تعطل التطبيق، أو I إيقاف التطبيق من التشغيل في VS فإنه يترك الرمز في ذلك حتى أنا تحوم فوق مع الماوس. في بعض الأحيان سوف ننظر الى هناك، وسوف يكون هناك 10 أو نحو ذلك الرموز.

وأنا أتأكد من رمز يذهب بعيدا؟

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

المحلول

وليس هناك طريقة للقيام بذلك. نوافذ لا الاستقصاء البرنامج لمعرفة ما اذا كان لا يزال على قيد الحياة. ولذلك، فإن الرمز الخاص بك البقاء في علبة النظام حتى إما أقول ذلك لترك (خروج العادي)، أو يقوم المستخدم شيء الذي يبدأ مكالمة لبرنامج (مثل تمرير مؤشر الماوس). ثم يقتصر على قذيفة تعرف أن البرنامج قد مات، وأنه يحتاج إلى تنظيف الرمز الخاص بك.

نصائح أخرى

لديك عدة خيارات:

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

2) كتابة تطبيق جهاز العرض الذي ينام على التعامل مع العمليات الرئيسية الخاصة بك، ويقتل رمز عندما يستيقظ (توفي التطبيق الرئيسي). لجعل هذا العمل السيناريو الأخير بشكل جيد، فسوف المرجح تريد عملية الرئيسي لعدم قتل الرمز نفسه - أو يمكنك إنشاء طريقة لمعرفة التطبيق رصد أنه ينبغي الخروج ث / س تدمير رمز (لديها النوم رصد التطبيق على كل مقبض عملية وحدث مسمى - وإذا استيقظ الحدث ثم يموت ببساطة ث / س تنظيف بعد التطبيق الرئيسي)

.

وقبل خروج، تعيين الخاصية مرئي NotifyIcon إلى false.

وتحتاج إلى استدعاء التخلص على NotifyIcon لذلك لترك الدرج.

وتحرير: هناك حدثا يمكنك ربط في في Program.cs الخاص بك. لجميع تطبيقات ويندوز، سوف يكون لديك شيء من هذا القبيل:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

والطبقة تطبيق لديها عدد قليل من الأحداث التي يمكن الاستفادة منها لتعرف متى يموت التطبيق الخاص بك:

        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

ويمكننا إخفاء trayIcon قبل إغلاق النموذج. إضافة FormClosing الحدث

NotifyIcon ni;
...
...
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
     ni.Visible = false;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top