[英]Can a C# Form application run without Application.Run?
我有一個最初用Java創建的庫,但是我想用C#重寫(並更新)它。 我已經找到IKVM,可能必須走那條路。 但是我的首選是用C#重寫該庫。
該庫是一種教學工具,讓人聯想到烏龜圖形或機器人Karel。 因此,我需要能夠打開非模式窗口,同時仍從Main方法發送命令。
為了模仿原始代碼,我想使用類似於下面顯示的代碼來啟動程序,因為這將加強對象聲明和實例化的典型方式。 顧名思義,MyCustomForm將是Form的子類。
MyCustomForm myform =新的MyCustomForm(...);
我已經搜索了該網站,但沒有找到其他類似我的問題。
這在C#中可能嗎?
是的,有幾種方法。 最簡單的方法是定期調用Application.DoEvents 。 這是您可能如何編寫的簡短示例。
static class Program {
static bool formClosed = false;
[STAThread]
static void Main() {
MyCustomForm form = new MyCustomForm();
form.Show();
form.FormClosed += Form_FormClosed;
while(!formClosed) {
Application.DoEvents();
Thread.Sleep(10);
}
}
private static void Form_FormClosed(object sender, FormClosedEventArgs e) {
formClosed = true; }
}
但是,存在比此示例更好的解決方案。 盡管您的應用程序不是游戲,但您想讓Google使用的術語是“ C#游戲循環”。
是的,只需在表單上使用ShowDialog(),就這么簡單,然后在表單關閉時調用Application.Exit()。 不需要Application.DoEvents(); 就我而言,我正在使用它來允許用戶再次使用另一個用戶登錄。 所以我可以關閉我的主表單e然后再次顯示用戶登錄表單
不,不可能。
Application.Run()啟動事件泵,使您的應用程序可以響應事件。 這包括來自用戶的事件(例如,單擊,拖動,最大化,關閉)和來自操作系統或您自己的程序的事件(例如,重新繪制窗口,響應計時器,在O / S被自己關閉)。 所有Windows窗體應用程序都需要這種事件泵,以提供典型的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.