小事一椿,但印象中我已經是第二次為了這個問題在Google上找答案,為了怕以後再找第三次,所以寫下來,協助日益衰退的大腦能記牢一點。

Scenario是這樣的,Window Form程式,有個DataGrid清單列出交易記錄,當點選Grid中某一筆資料時,會叫出另一個Form(TradeSummary)顯示該筆資料的交易彙總統計。TradeSummary設定TopMost=true,所以同一個視窗會一直保持在最上層,User點選Grid中其他筆資料時,立即切換其他的交易彙總。啟動的程式碼會是

TradeSummary ts = new TradeSummary();
ts.Show();

當TradeSummary被使用者關掉後,物件關閉但ts!=null,而且我發現各屬性(例如: ts.Visble)仍然可以讀取,但如果呼叫它的Method(例如: ts.Show()),就會噴出物件已經Disposed的Exception

{System.ObjectDisposedException}
    System.InvalidOperationException: {System.ObjectDisposedException}
    Message: "Cannot access a disposed object named \"TradeSummary\".\r\nObject name: \"TradeSummary\"."
    ObjectName: "TradeSummary"
    objectName: "TradeSummary"

解決方法? 很簡單!
if (ts==null || ts.IsDisposed)
{ ts=new TradeSummary(); ts.Show(); }


Comments

Be the first to post a comment

Post a comment