このトピックに関するスレッドがいくつかあることは知っていますが、私のものは違うと思います。私のアプリケーションでは、ユーザーが今後の印刷用にいくつかのパラメーターを入力できるフォームを開きます。この印刷は、バックグラウンドワーカーで実行されることになっています。そこで、そのバックグラウンドワーカーをイベント「OnFormClosing」で起動します。
そのバックグラウンドワーカー内で、GUIにアクセスして変更/読み取る必要があるため、control.Invoke()が必要です。「時々」Invokeはinvoke呼び出し自体でスタックし続け、デリゲートを実行しません。メインスレッドは正常に動作しており、ブロックされていません。私はまだ他のことをしているGUIと対話することができます。コードを投稿する前に:control.Invoke()を実行するための他の条件はありますか?
- メインGUIスレッドはブロックされていません
- contorlが存在し、ハンドルが作成され、廃棄されていない必要があります
メインスレッドはフリーである必要はなく、正確に呼び出しは正しいと呼ばれますか?メインスレッドがアイドル状態になると続行する必要があります...
助けてくれてありがとう
アップデート:
その問題の間のスレッドの状況は次 のとおりです。メインスレッドはこれを実行しています。
Application.Run(appContext);
だからそれはアイドルです。ワーカースレッドは次の行で待機しています。
fileName = (string)cbPrintFile.Invoke(new Func<String>(() => cbPrintFile.Text));
上記のように実行されません。cbPrintFile
コンボボックスです