当使用锁的代码块中存在异常时,我遇到了问题。我正在读取和写入串行端口,并且有几个不同的线程需要访问同一个串行端口。这是由锁管理。除了串口停止工作外,我没有任何问题。这可能发生,因为软件控制RF发射器,偶尔rf可能导致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
{
}
}
感谢您的帮助
答案 0 :(得分:0)
如果要强制退出应用程序,Application.Exit
不是一个好的候选者,因为它只是在所有线程的消息队列上推送关闭请求,但不强制执行任何操作。如果您想不惜任何代价停止应用,请使用Environment.Exit(exitCode),或者更好Environment.FailFast,并指定例外,以便将其记录到系统的日志中:以方便日后调查。