2013-05-13 71 views
1

代碼調試的一個星期後,我發現我的Windows窗體GUI是行爲異常的問題,因爲我跑的形式:在Application.Run之外創建Windows窗體會產生奇怪的行爲。爲什麼?

Form1 myGui = new Form1(); 
Application.Run(myGui); 

改變代碼:

Application.Run(new Form1()); 

顯然做了伎倆。

我遇到的問題是,由於某種原因,如果我以第一種方式創建窗體,並試圖用Invoke/BeginInvoke模式編組調用,則調用從未解決,使其他線程掛在Invoke的情況,或者根本不用BeginInvoke調用函數。

任何人都可以解釋爲什麼會發生這種情況?

此外,我在Mono和Unity3D上運行應用程序。

謝謝大家

+0

這是一個範圍界定問題嗎?兩種方法之間沒有區別,除了Form1的生命週期。 – Neil 2013-05-13 10:48:28

+0

這兩行代碼完全相同。這聽起來像是Mono的問題。 – 2013-05-13 10:50:53

+0

感謝您的回覆。 至於範圍,變量「myGui」是一個類變量,它在調用類構造函數時得到實例化,但在調用方法「SpawnGui」時運行。我不認爲這可能會導致範圍問題! 由於單聲道,是的,這可能是問題,但這種行爲是如此奇怪,我認爲還有一些其他問題。謝謝 – user2335498 2013-05-14 06:56:53

回答

0

我已經在Windows和Mono在很多場景中的形式引用管理全局或作用域在或通過Main方法靜態調用Application.Run期間可用類的工作。這聽起來太可疑了,只是一個範圍問題。你有沒有試過一個簡單的應用程序,只有你提到的那段代碼?我無法在Mono下使用Unity3D重現相同的結果。