某项目中,需通过com口的方式读取CF卡的rfid,。
问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!):
断点调试:在用户控件Loaded事件尝试打开Com口时出现异常:对端口Com1的访问被拒绝”。
最后找到原因及解决方法:
加载用户控件时打开了com口,关闭模块时同时也该关闭com口,但是用户控件没有Closing或Closed事件,咋办呢?于是我用了UnLoaded事件解决了这个问题,反复打开关闭模块,不再出现”访问com口被拒绝”这个错误:
UnLoaded事件:
关闭Com口:
总结: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; } } }