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

时间:2015-02-06 18:56:07

标签: c# multithreading exception locking

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

        }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果要强制退出应用程序,Application.Exit不是一个好的候选者,因为它只是在所有线程的消息队列上推送关闭请求,但不强制执行任何操作。如果您想不惜任何代价停止应用,请使用Environment.Exit(exitCode),或者更好Environment.FailFast,并指定例外,以便将其记录到系统的日志中:以方便日后调查。