我正在創建一個簡單的Windows窗體應用程序,此窗體在初始化時創建多個新對象,在某些情況下(出現錯誤時)會向用戶顯示帶有某些文本的消息框對話框。多次調用Windows窗體構造函數
我的問題是,如果發生錯誤,消息對話框會多次出現。當檢查爲什麼會發生這種情況時,我發現窗體應用程序的構造函數被多次調用,其中四次是確切的。不知怎的,我不認爲這是正常的行爲...
我的應用程序由一個MainWindow.cs文件中的Main()
;
public MainWindow()
{
InitializeComponent();
Setup();
}
private void Setup()
{
stuff = new Stuff(this);
}
public static void Main()
{
Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.Run(new MainWindow());
}
的Stuff
構造函數裏面是正在顯示MessageDialog
地方。
在構造函數MainWindow()
中添加一個斷點我可以看到它被多次調用。
有人能告訴我爲什麼這是,如果有什麼我可以做,以防止它發生?
我試圖通過使用boolean
變量來抑制對話框,但因爲對象被重新創建我不能做到這一點(也不應該有反正...)
不,構造函數不會被多次調用(在您發佈的代碼中)。萬一你的斷點被多次碰撞......一個有用的提示可能是檢查完整的堆棧跟蹤... –
線程可能?或Application.Run(新的MainWindow())它不應該調用另一個窗體而不是它自己? – Edper
@Edper線程不應該是一個問題,因爲我還沒有創建任何新線程來處理該窗口。由於它是在靜態方法Main中調用的,因此Application.Run不會自行調用。 – Sander