当使用锁的代码块中存在异常时,我遇到问题。我正在读取和写入串行端口,并且有几个不同的线程需要访问相同的串行端口。这是通过锁来管理的。除非串口停止工作,否则我没有任何问题。这可能会发生,因为软件控制射频发射器,偶尔射频可能会导致USB串口停止运行。如果您尝试写入端口,您将收到写入超时。我试着从try-catch异常处理程序中处理这个问题。但是,该程序在那个时候很难锁定,并且必须让这个任务失效。我不确定这是否来自异常或我试图显示的消息框,因为它可能来自后台线程。下面是代码:尝试在锁定的代码块中捕获异常
lock (_object)
{
try
{
if (portOpened)
{
port.Write(data);
}
else
{
MessageBox.Show("The radio is not connected. Please select a ComPort in the settings dialog");
}
}
catch (Exception x) //this will capture a write exception.
{
MessageBox.Show("The program is unable to write to the serial port. Select OK to close the program";
Application.Exit();
}
finally
{
}
}
感谢所有帮助
你为什么把'lock'里面的异常*放在'lock'的外部而不是'lock'的外部?你为什么要从非UI线程或甚至非UI代码与用户进行交互?将业务逻辑与用户界面分开。 – Servy 2015-02-06 18:57:22
锁只应包围需要防止重入的代码。在你的情况,看起来像port.Write是所有需要锁定。 – Will 2015-02-06 18:58:10
@Will'if'也可能需要在'lock'内,假设'portOpened'与另一个线程共享。 – Servy 2015-02-06 18:59:06