【发布时间】:2017-01-20 21:58:49
【问题描述】:
想象一下这种情况,当 Windows 窗体上有一个按钮读取名为 x 的变量的值时。同时,有一个线程偶尔运行一次(使用计时器),它会清除该变量并将新数据放入其中:
//this function runs by a thread
void newData()
{
manualReset.WaitOne();
//clear x
//put new data in it
}
private void btRead_Click(object sender, EventArgs e)
{
manualReset.Reset();
//read x
ManualReset.Set();
}
现在如果我在线程执行“waitOne()”行时及时单击按钮,这次重置不会生效,因为“waitOne”已经过去,线程将在我执行时清除数据试图在主 UI 线程中读取它。那么解决方案是什么?提前致谢
【问题讨论】:
-
简单地使用锁怎么样?
标签: c# multithreading