簡體   English   中英

BackgroundWorker阻止NotifyIcon的ContextMenu

[英]BackgroundWorker blocking NotifyIcon's ContextMenu

我有一個帶有以下(骨架)代碼的WinForms應用程序:

namespace MyTrayApp
{
    public class SysTrayApp : Form
    {
        [STAThread]
        public static void Main()
        {
            try
            {
                SysTrayApp app = new SysTrayApp();
                Application.Run();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private NotifyIcon _trayIcon;
        private ContextMenu _trayMenu;

        private BackgroundWorker _bw = new BackgroundWorker();

        public SysTrayApp()
        {
            _trayMenu = new ContextMenu();
            _trayMenu.MenuItems.Add("Exit", OnExit);

            _trayIcon = new NotifyIcon();
            _trayIcon.Icon = new Icon(SystemIcons.Asterisk, 40, 40);

            _trayIcon.ContextMenu = _trayMenu;
            _trayIcon.Visible = true;

            _bw.WorkerReportsProgress = false;
            _bw.WorkerSupportsCancellation = true;
            _bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            _bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
            _bw.RunWorkerAsync();
        }

        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
        // do stuff
        }

        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
            return;
            }
            Thread.Sleep(TimeSpan.FromMinutes(5)); // wait 5 minutes...
            _bw.RunWorkerAsync(); // then run again
        }
    }
}

問題是,我只能在應用程序啟動時右鍵單擊以打開ContextMenu。 看來,一旦BackgroundWorker開始休眠,它將以某種方式阻止ContextMenu。 有什么想法嗎?

由於您已讀取BGW的方式,因此在gui(主)線程( http://msdn.microsoft.com/zh-cn/library/ms171728.aspx )上執行Thread.Sleep您應該使用Timer而不是Thread睡眠5分鍾。

計時器類別: http//msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM