簡體   English   中英

C#Application.Run沒有表格

[英]C# Application.Run without Form

是否可以調用Application.Run,​​但是不傳遞表單參數,或者如果沒有表單可以調用,是否有替代方法?

Run方法似乎沒有任何不接受表單的重載。

例如,如果我想首先實例化一個類,然后調用該表單,那么是否可以執行以下操作:

Application.Run(myClass);

為了澄清,我仍然想要.Run()提供的功能。 也就是說,建立一個循環來保持應用程序運行,但不是跟蹤表單,而是跟蹤類或其他對象。

這最初與緊湊框架有關。 我假設這就是為什么Run方法沒有我想要的重載。

Run方法似乎沒有任何不接受表單的重載。

呃... http://msdn.microsoft.com/en-us/library/ms157900.aspx

Application.Run方法

開始在當前線程上運行標准應用程序消息循環,沒有表單。

public static void Run()

我不清楚你是否願意這樣做:

  1. 您希望將表單加載到Main()以外的其他位置
  2. 或者運行沒有 UI的控制台或服務應用程序。

對於(1)

static void main()
{
    //Your program starts running here<<<

    //Do some stuff...
    FormRunner a = new FormRunner();
    a.RunForm();

} // << And ends here

class FormRunner {

    public void RunForm() {
        Application.Run(new Form());
    }

    //You could call which ever form you want from here?
} // << And ends here

你需要知道的是你的程序從main的第一行開始,到最后一行結束。 但是 ,當您調用Application.Run(FORM)它會為該表單加載一個Windows消息循環 它是一個特殊的循環,可以使程序保持在主程序中並等待事件(它們在win32 API中稱為Windows消息)

因此,在用戶單擊關閉按鈕之前,程序不會結束。 當這種情況發生時,那就是當你的程序實際上將從Main return

(2)所以現在如果你只想要一個沒有表格的純控制台應用程序:

static void main()
{
    AcceptInputs()
    DrawScreen()

    //Do something else.
    //Make sure your flow stays within the main

} // << Once you come here you're done.

void AcceptInputs()
{
    while(true) {

        //Keep accepting input
        break; // Call break when you're done. You'll be back in the main
    }
}

我希望有所幫助。

您可以使用Application.Run的重載,該重載接受應用程序上下文作為其唯一參數。 ApplicationContext基本上只是一個可以繼承的類,並添加您喜歡的任何功能。 有關詳細信息,請參閱鏈接中的示例。

using System;
using System.Windows.Forms;

static class Program
   [STAThread]
   static void Main() {
      Application.Run(new myClass());
   }

   internal class myClass : ApplicationContext {
      public myClass() {
         Application.Run(new myWindow());
      }
   }
}

但是,這里的問題是,某些東西必須調用myClass的這個實例並告訴它退出,否則程序將在所有窗體關閉后繼續運行。 並忽略在構造函數中調用ExitThread()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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