我lock
在一个全局对象上,以便从各种线程同步与外部设备的通信,这工作正常。
我想使用一个slider
控件来设置值,然后将其发送到我的外部设备,所以我使用它的Scroll
事件来监听更改,然后再将它们发送到设备。
问题是,在与设备通信之前,我需要lock
在全局对象上,如下:
private void slider_Scroll(object sender, EventArgs e)
{
lock(lockObject)
{
//send slider values to external device
}
}
以上总是无限期地挂在试图获得lock
. 我的其余代码工作正常,所以我认为我没有真正的竞争条件 - 我假设这是因为它在 UI 线程上运行并且在 UI 线程上阻塞是一个坏主意?我可能是错的。
但是,如果是这种情况,我猜我需要将上面的代码包装在一个方法中,并以某种方式在 UI 线程的“主”线程上调用它?
我怎样才能做到这一点?