スレッド/バックグラウンド プロセスに頭を悩ませているのが最悪です。私の問題は、ある程度まではよくあることのように思えますが、私のニーズを満たす良い例をまだ見つけていません。
古典的な例は次のようになります:
特定の長時間実行されるタスク/プロセスが実行されると、UI がフリーズします - 少なくとも UI を移動/最小化できるようにしたいです。
従来の応答には、スレッド化とタスク ファクトリ、および BackgroundWorker ソリューションが含まれます。しかし、どのように実装しても、結果は良くありません。
私のプログラムでは、別のアプリケーションを実行していて、それが終了するのを待っています。簡単にするために、私は次のようにやっているとしましょう:
Process p = Process.Start("notepad.exe somefile.txt");
p.WaitForExit();
//read somefile.txt
WaitForExit()
メモ帳を閉じるのを待っている間にアプリケーション UI がハングアップすることは明らかでした。
私はこれについて多くの提案された手段を試みましたが、2 つのコーナーのいずれかにペイントされます。
- インターフェイスがまだハングし、メモ帳を閉じると somefile.txt が正常に読み取られます。
- プロセス (メモ帳) は正常に実行されますが、メモ帳を閉じる直前にアプリケーションが somefile.txt を読み取ります (したがって、非同期で実行されていると思います)。
私が見るほとんどの例は、大きな数まで数えることを含んでいます。単純ですが、私がやっていることとはまったく異なります。この「外部」プロセスを起動すると、少し複雑になります。
お時間をいただきありがとうございます。