我遇到了线程同步的问题。我的演示者分析了一些传感器并更新了 UI 表单。我将更新代码移动到单独的线程中。它工作正常,但是如果用户在更新视图时停止演示者,软件就会冻结 - 我发现它发生在 view.UpdateUI 工作时(它只是使用 Invoke 设置了一些标签)。我的问题在哪里?我使用紧凑型框架 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(...);
}
}
}