私のアプリケーションでは、バックグラウンドスレッドで実行されているタスクがあります。 MessageBoxまたは任意のモーダルダイアログがUIスレッドに表示されるときに、バックグラウンドスレッドで通知が必要です。フォームのメッセージボックスがいつ表示されたかを知るには?
私はMessageBoxを表示する前にいくつかの関数を呼び出すことによって手動で行うことができますが、必要がなければ素晴らしいことになります。例えばのために
:
backgroundThread.MessageShown(); // I do not want to call this explicitly every time!
MessageBox.Show("Task halted!");
私は可能性が私にそこに引っ掛けることができ、いくつかのメッセージを推測しています。メインのGUIスレッドでも、モーダルダイアログが表示される直前に発生するメッセージ/イベントはありますか?
これは必須です。 UIスレッドで実行されるいくつかのタスクがあり、別のダイアログで進行状況を表示する必要があります。これはワーカースレッドに表示されています。私はそれがワーカースレッドで行われなければならないタスクでなければならないことを理解していますが、現在のシナリオは当面は変更できません。
すべてのことがうまくいきます。ただし、メッセージボックスがUIスレッドに表示されている場合は、進行状況ダイアログの下に表示されません。したがって、ユーザーはUIが入力を待っていることを知ることはありません。私は、モーダルダイアログボックスが表示されていることを通知する方法が必要です、そして、私は進捗ダイアログを隠すべきです。
今は、MessageBoxを呼び出す直前に明示的に非表示にする必要があります。
私はそれが説明されることを願っています。
これはうまくいかないかもしれませんが、なぜあなたのバックグラウンドスレッドはUIの状態を知る必要がありますか? –
@Damien_The_Unbeliever:バックグラウンドスレッドはUIスレッドでもあるため、フォアグラウンドUIスレッドに従って動作する必要があります。 – nullDev