0

バックグラウンドで実行する Windows アプリケーションを開発しています (長時間実行されるプロセスの場合)。

アプリケーションは、NotifyIcon ツール ヒントによってプロセス ステータスを表示します。

NotifyIcon ツール ヒント コントロールに ContextMenu コントロールを追加しました。アプリケーションがアイドル状態 (作業を行っていない) のときはいつでも、コンテキスト メニューは正常に機能しますが、プロセスの実行中にコンテキスト メニューがハングします。

すべてのプロセスが異なるスレッドで実行されています。長時間実行されているバックグラウンド プロセス用のスムーズなコンテキスト メニューを作成する方法を誰か教えてもらえますか?

4

1 に答える 1

2

ウィンドウまたはフォームを使用してユーザー インターフェイスを表示するプログラムとまったく同じ規則が、NotifyIcon を持つプログラムに適用されます。NotifyIcon は、Application.Run() を呼び出したプロセスのメイン スレッドに通知を送信します。そして、そのメインスレッドが「プロセスの実行」などの他のタスクでビジーである場合、NotifyIcon は緊張状態になります。通知を送信しようとしていますが、その「プロセス」の実行でビジーであるため、メインスレッドはリッスンしていません。

通常の gui プログラムとまったく同じ方法でこれを解決する必要があります。ワーカー スレッドで処理コードを実行する必要があります。BackgroundWorker、Task、async/await キーワードなど、標準の .NET ソリューションを使用します。または、Thread または ThreadPool を使用して独自にスピンします。

すでにこれを行っている場合、質問からは明らかではありません。たとえば、ReportProgress を頻繁に呼び出す BackgroundWorker に注意してください。それでもメイン スレッドが停止します。

于 2013-05-01T09:04:40.863 に答える