2013-04-07 46 views
1

確認問題:我的磚模式按鈕運行在我的退出按鈕的代碼爲一些未知的原因按鈕打開窗體2被中止主線程(不打算)

private void brickToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     //if (f2 != null) return; 
     f2 = new Form2(); 
     f2.ShowDialog(); 
    } 

    private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     myThread.Abort(); 
     Close(); 
    } 

我創建這個磚斷路器遊戲有一個用於主窗口(包括槳和磚)的螺紋和用於球運動的螺紋。在我的程序中,如果我點擊按鈕打開form2,整個程序就會終止,因爲它正在運行另一個按鈕的代碼。

有沒有打開,將不會終止我的程序窗口2的另一種方式?我已經嘗試過不同類型的顯示,如ShowDialog,在這種情況下,我看到form2爲四分之一秒。然後整個程序終止。

這是我的Form 1代碼的鏈接。 http://pastebin.com/FB19qd7e Form 1設計代碼:http://pastebin.com/RS8VZT5U

編輯:輸出顯示類型 「System.Threading.ThreadAbortException」這

第一次機會異常出現在mscorlib.dll 型系統的」異常。 Threading.ThreadAbortException」 mscorlib.dll中發生,但在用戶代碼中沒有處理

好吧,我有三個按鈕,退出,暫停和磚(這將打開窗口2)。暫停按鈕按預期工作,退出也一樣。但是,如果我點擊bricks按鈕,由於某種原因它會從退出按鈕運行Thread.Abort。如果我將退出按鈕代碼註釋掉,那麼磚塊按鈕就可以很好地工作。

+0

你是否啓用了「打破所有例外」功能?此外,您不建議*在哪裏添加該代碼,這會對程序的行爲產生重大影響。 – 2013-04-07 00:23:59

+0

我只是運行程序正常。它會在某處的某個屬性中啓用嗎?至於我在哪裏添加代碼,我只是想要一個按鈕來創建一個新表單。而且我可以創建一個新項目並讓它工作來創建另一個表單,但是在這個特定的項目中,它不起作用。 – krikara 2013-04-07 00:27:55

+0

在vs中按ctrl-alt-e,異常對話框將打開。選中cli異常旁邊的框,調試器將打破任何異常,這可能會幫助您識別問題。 – 2013-04-07 00:30:41

回答

4

看起來您已將Deactivate事件設計中的Form1事件連接到exitToolStripMenuItem_Click事件處理程序。

this.Deactivate += new System.EventHandler(this.exitToolStripMenuItem_Click); 

,將調用exitToolStripMenuItem_Click當你的Form1失去實例重點。當你表現出的Form2一個新實例現有的Form1實例將不再是活性形式,這將觸發調用事件處理這反過來將使得呼叫Abort

+0

有趣......我從來沒有編輯設計器文件,我可以發誓我沒有碰過任何退出按鈕屬性,但我可能做到了。謝謝 – krikara 2013-04-07 14:57:38