嗨 我打開這樣的形式從我的主窗體中,當用戶選擇一個菜單項。我只能關閉表單一次,InvalidOperation異常Invoke或BeginInvoke不能在控件上調用,直到窗口句柄被創建
private void commToolStripMenuItem_Click(object sender, EventArgs e)
{
Command_Form Command_Form1 = new Command_Form();
Command_Form1.ShowDialog();
// Command_Form1.Dispose(); this didn't help
}
形式「Command_Form1」 我關閉它這樣當用戶點擊關閉按鈕裏面
private void Close_button_Click(object sender, EventArgs e)
{
this.Close(); //I get the exception here
}
這個過程正常工作一次,但在形式 的第二封閉(這我希望是一個完全不同的/新形式的實例)我得到這篇文章標題中的錯誤。 這是調試窗口中的輸出。
「System.InvalidOperationException」類型的第一次機會異常出現在System.Windows.Forms.dll中
所有在名單上這個錯誤去沒有試圖做任何事情,有一個表格的主題沒有被顯示,但是當我點擊表單上的按鈕時會發生這種情況。 在我看來,幾乎可以確保表單已經顯示,如果我能夠點擊它的按鈕。
其他職位我發現列出這種類型的錯誤繼續關於進行線程安全調用,所以我嘗試了這個作爲一個實驗,但它沒有任何區別。
private void Close_button_Click(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
CloseCallback d = new CloseCallback(Close_button_Click);
Invoke(d, new object[] { sender, e });
}
else
{
this.Close();
我在我的應用程序中有多個線程,但它們是由我明確使用的控件創建的。 我通過一個委託[Marshall]接收/發送的數據將串行數據從/傳遞到表單。 它是有道理的,串行端口將運行在不同的線程上,而不是窗體,但爲什麼按鈕單擊表單是在一個不同的線程比形式?????
整個線程的事情是非常困惑 如何找出什麼線程來自哪裏,以及我沒有明確創建的線程中發生了什麼? 爲什麼我需要通過委託來調用窗體的close方法? 在這個線程安全的多線程環境中,有什麼我可以做的事情我怎麼知道我在做什麼是不安全/安全的,如果我不知道什麼/哪裏/爲什麼/誰/什麼時候創建線程?
可能重複[我只能關閉窗體一次,InvalidOperation異常Invoke或BeginInvoke不能在控件上調用,直到窗口句柄被創建](http://stackoverflow.com/questions/4959502/i-can -only-close-a-form-once-invalidoperation-exception-invoke-or-begininvoke-ca) – 2011-02-10 20:36:57