スレッド同期の問題に直面しました。私のプレゼンターはいくつかのセンサーを分析し、UI フォームを更新します。更新コードを別のスレッドに移動しました。正常に動作しますが、ビューの更新中にユーザーがプレゼンターを停止すると、ソフトウェアがフリーズします - view.UpdateUI が動作しているときに発生することがわかりました (Invoke を使用していくつかのラベルを設定するだけです)。私の問題はどこですか?Compact Framework 3.5 と Windows CE 5 を使用しています
using System.Threading;
class MyPresenter
{
UserControl view;
private Thread thread;
private ManualResetEvent cancelEvent;
public void Start()
{
cancelEvent = new ManualResetEvent(false);
thread = new Thread(UpdateView) { IsBackground = true };
thread.Start();
}
public void Stop()
{
if (thread != null) {
cancelEvent.Set();
thread.Join();
thread = null;
}
}
private void UpdateView()
{
while (cancelEvent.WaitOne(1000, false) == false) {
// analyze something
view.UpdateUI(...);
}
}
}