ハンス・パッサントはここで私に素晴らしい答えをくれたので、私はその仕組みを理解するためにもっと詳細を尋ねることを考えましたApplication.Run()
。
ドキュメントから理解できる限りApplication.Run()
、現在のスレッドでメッセージループが開始され、ユーザー入力を処理できるようになっているようです(そうですか?)。オーバーロードされたバージョン Application.Run(Form)
は基本的に同じことを行いますが、フォームが閉じたときにのみ存在し、デフォルトでフォームを表示します。
それはいくつかの質問を提起します:
Main()
サブからユーザーと通信できる関数(メッセージボックスなど)を呼び出して、終了するのを待つにはどうすればよいでしょうか。ShowDialog
起動時にフォームをすぐに表示したくない場合を除いて、機能する可能性があります(たとえば、起動されたforがシステムトレイに最小化されている場合)- 基本的に、状況は次のようになります。サブ `Main`には、20分で実行するタスクのリストがあり、プログラムが20分で動作することをユーザーに通知するシステムトレイアイコンがあります。タイマーは20分後に刻み、約を実行する必要があります。進行状況ダイアログのインスタンスを作成するたびに、最初はタスクバーに非表示になっている15個のタスク。
- `ShowDialog`は、不要なフォームを表示します。したがって、私が行う方法は、進行状況ダイアログに次のタスクを開始する関数へのコールバックを渡すことです。しかし、それは2番目の進行状況フォームが終了する前に、最初の進行状況フォームを終了しませんか?つまり、15のフォームが開かれることになります...
- したがって、解決策は、メインアプリケーションループでコールバックを呼び出す(begininvoke?)ことです...ただ、コールバックを呼び出すためのループに関連付けられたフォームがないため、これを行う方法がわかりません。 ..。。
私の質問が明確であることを願っています(私は多くのことを混乱させるかもしれません、ごめんなさい)、
ありがとう、
CFP。