對端口Com1的訪問被拒絕


     某項目中,需通過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;

                }

            }

        }
View Code

 

Window.Closed 事件:在窗口即將關閉時發生。

                                 一旦引發此事件,就無法阻止窗口關閉。

 

FrameworkElement.Unloaded事件:當從加載的元素的元素樹中移除元素時發生。                          

                                                     在某些情況下是不會被觸發的。比如說:Window在Closing的時候,是不會去觸發它的子元素的Unloaded 事件。

                                                     Loaded和UnLoaded和UI有關。Closing和窗體本有關。

                                                     比如下窗口初始化的時候,如果窗口是隱藏的,那么Loaded是不會觸發的。

                                                     因為它只在這個控件開始Visible的時候觸發。同理,UnLoaded也是。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM