0

ここでかなり奇妙な問題があります。マルチスレッド プログラムがあり、1 つのスレッドがユーザー インターフェイス用で、1 つのスレッドが残りのプログラムのすべてのコンポーネントを初期化します。初期化スレッドを開始すると、ユーザー インターフェイス スレッドは (メイン フォームの上に) 進行状況バーを含むフォームを表示し、何かが起こっていることをユーザーに示します (これが、初期化スレッドが別のスレッドで行われた場合、別のスレッドである理由です)。メイン スレッドでは、このフォームは更新されず、プログラムがクラッシュしたように見えます)。初期化スレッドの特定の時点で、プログラムはユーザー入力を求める必要がある場合があります。通常、これはメッセージ ボックスを表示することによって行われます。また、ターゲット PC にはキーボードやマウスがなく、タッチスクリーン インターフェイスのみであることに注意することも重要です。ここで問題があります。初期化スレッド内からメッセージ ボックスを表示すると、メインフォームは親ではありません。これが意味することは、ユーザーがメッセージ ボックスの外側をクリックすると、メッセージ ボックスがメイン フォームの背後に移動し、ユーザーがキーボードを接続して、メッセージ ボックスに再びフォーカスを合わせて回答を選択するまで、プログラムは停止するということです。私はこれを回避するためにあらゆる種類の方法を試しました。メイン フォームを親にしようとしましたが、クロス スレッド エラーが発生します。初期化スレッドでメイン スレッドを呼び出そうとしましたが、初期化が続行され、ユーザー入力の結果をフィードバックできません。常に一番上に表示される特別なメッセージ ボックスを作成しましたが、これによりエラーが表示されなくなります (3 番目のスレッドでエラーが発生した場合)。私の最終的なアイデアはおそらくうまくいくでしょうが、それは面倒で、おそらく正しい解決策ではありません. これには、すべての初期化ステップの進捗ポイントを作成する必要があります。各ステップが終了したら、完了としてマークします。次に、初期化スレッドが終了する質問に遭遇した場合、メイン スレッドは質問をしてから、既に初期化されているものをすべてスキップして初期化スレッドを再起動し、. 私はアイデアがありません。メイン スレッドがメッセージ ボックスを表示してこのフィードバックを提供している間に、初期化スレッドを一時停止してフィードバックを待つにはどうすればよいですか? 前もって感謝します!メイン スレッドがメッセージ ボックスを表示してこのフィードバックを提供している間に、初期化スレッドを一時停止してフィードバックを待つにはどうすればよいですか? 前もって感謝します!メイン スレッドがメッセージ ボックスを表示してこのフィードバックを提供している間に、初期化スレッドを一時停止してフィードバックを待つにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1