簡體   English   中英

C#Form應用程序可以在沒有Application.Run的情況下運行嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM