無法訪問已釋放的物件 窗體或元件

2022-08-28 13:33:22 字數 1169 閱讀 1573

c#在父視窗中呼叫子視窗的過程() 收藏 

c#在父視窗中呼叫子視窗的過程:

1、 建立子視窗物件

2、 顯示子視窗物件

筆者的程式中,主窗體mainfrm通過選單呼叫子視窗childfrm。在窗體中定義了子視窗物件,然後在選單項點選事件中,加入了如下**來建立和顯示子視窗:

private childfrm mychildfrm = null; //定義子視窗物件

private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)

...當點選選單中的openchild項時,建立了子視窗並顯示在最前面。此時如果關閉子視窗再點選選單開啟,不會有問題。但是如果子視窗沒有關閉的情況下,再次點選選單中的openchild項,則會再建立乙個子視窗。兩個子視窗具有相同的內容,這不是我們所希望看到的。

為此,對選單項點選事件做如下改進:

private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)

...else

...}

這樣修改的目的是:當子視窗物件存在時,直接顯示子視窗。當子視窗不存在時,建立子視窗,然後再顯示。

現在來檢驗效果:當第一次點選openchild選單項時,建立子視窗並正確顯示。不關閉子視窗的情況下再點選openchild選單項,子視窗只顯示了乙個,說明按預期工作了。現在,我們關閉子視窗,再點選openchild選單項,程式在執行到下面這個語句時出現「未處理 objectdisposedexception」異常。

if(mychildfrm != null)

else

...}

前面這是按邏輯的方式進行思考的,顯示子視窗和獲得焦點兩行是重複的,兩個if語句也可以做一下簡化。指定子視窗和父視窗的父子關係。最後的結果是這樣:

private void openchildfrmtoolstripmenuitem_click(object sender, eventargs e)

...mychild..mdiparent = this; //建立父子關係

mychildfrm.show(); //顯示子視窗

mychildfrm.focus(); //子視窗獲得焦點

}這樣,就能夠如我們如願般呼叫子視窗了。

C Socket連線 無法訪問已釋放的物件

在進行socket長連線時,若伺服器或客戶端出現異常時,另外一端對socket對話進行操作時,程式會出現無法訪問已釋放的物件的問題。例如客戶端出現問題主動斷開socket時,當伺服器操作socket時,比如主動斷開socket會話,那麼程式會出現 無法方位已釋放的物件 是由於客戶端的原因導致伺服器和...

Google的Hosts無法訪問

今天,多個google在國dnnevlu內的hosts的ip位址失效,其ip位址無法訪問,導致的現象是,使用者無法訪問google的所有服務,包括搜尋和gmail郵箱。眾所周知,如果google搜尋不使用hosts的話,會不太穩定,經常無法訪問,很多詞,甚至連 釣魚島 都無法搜尋,而使用hosts之...

無法訪問內網WEBServices服務的問題

公司有一伺服器,內網位址,通過路由器做了nat對映,對應了乙個外網ip。伺服器上部署了乙個webservice應用,用的是axis2框架。結果別人訪問這台伺服器的時候,獲取到的axis2自動生成的wdsl文件 即通過url 獲取 裡面寫的服務位址是這台伺服器的內網位址。對方自動解析wsdl後,用ws...