某项目中,需通过com口的方式读取CF卡的rfid,。

问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!):

         断点调试:在用户控件Loaded事件尝试打开Com口时出现异常:对端口Com1的访问被拒绝”。

最后找到原因及解决方法:

   加载用户控件时打开了com口,关闭模块时同时也该关闭com口,但是用户控件没有Closing或Closed事件,咋办呢?于是我用了UnLoaded事件解决了这个问题,反复打开关闭模块,不再出现”访问com口被拒绝”这个错误:

      对端口Com1的访问被拒绝

 

UnLoaded事件:

  对端口Com1的访问被拒绝

 

对端口Com1的访问被拒绝

 

关闭Com口:

对端口Com1的访问被拒绝

 

总结:WPF之Window.Closing 、Window.Closed、FrameworkElement.Unloaded 

三则的区别:

 

Window.Closing 事件 :在调用 Close 之后立即发生,并且可进行处理以取消关闭窗口。

                                   可以处理 Closing 来检测窗口何时关闭(例如,何时调用 Close)。此外,可以使用 Closing 来阻止窗口关闭。若要阻止窗口关闭,可以                                            将CancelEventArgs 参数的 Cancel 属性设置为 true

                                   当调用 Close、单击窗口的“关闭”按钮,将引发 Closing 事件。

 

代码示例:

     

   private void Window_Closing(object sender, CancelEventArgs e)

        {

            if (this.IsLoaded)

            {

                MessageBoxResult result = MessageBox.Show("是否退出程序?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result == MessageBoxResult.Yes)

                {

                    //do something to record the shutdown event

                    DateTime shutDownDt = DateTime.Now;

                }

                else

                {

                    e.Cancel = true;

                }

            }

        }
View Code

相关文章: