尝试在锁定的代码块中捕获异常

汤姆

当使用锁的代码块中存在异常时,我遇到了一个问题。我正在读取和写入串行端口,并且有几个不同的线程需要访问同一串行端口。这是由锁来管理的。除串行端口停止工作外,我没有任何问题。发生这种情况的原因是该软件控制了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
            {
            }

        }

谢谢你的帮助

提格兰

如果要强制退出该应用程序,Application.Exit则不是一个很好的选择,因为它只是将“关闭”请求推送到所有线程的消息队列上,但不强制执行任何操作。如果您想不惜一切代价停止应用程序,请使用Environment.Exit(exitCode),甚至可以使用更好的Environment.FailFast,并带有指定的异常,以便将其记录到系统日志中:方便将来进行调查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章