簡體   English   中英

命令行使winforms在沒有UI的情況下運行

[英]command line to make winforms run without UI

我不確定如何正確地提出這個問題。 所以請提前道歉。

但它主要圍繞如何使用UI創建現有應用程序,作為沒有UI的計划任務運行。

背景..

我有一個winforms應用程序用vs2012寫的2個表單。

第一種形式是登錄,直接,但目前期望用戶交互他們的用戶名和密碼。

第二個是主要形式。 當你點擊“開始”按鈕時,它會完成主要工作。

我想要實現它是為我發送一些命令行參數,將運行它沒有任何ui作為計划任務。

所以,我猜,我需要擺脫需要用戶輸入登錄詳細信息。 並以某種方式觸發“開始下載”按鈕並使其不可見。

我已經研究了如何發送命令行參數,並且可以看到如何讓軟件在聽到/沉默時做一些不同的事情但是如何隱藏表單?

我迷路了。

任何幫助將非常感激!

C#仍然有一個Main()函數。 在標准的winforms解決方案中,它所做的只是創建Form1(或重命名的任何內容),並使用該表單啟動應用程序事件隊列。

例如,它應該類似於:

public static void Main()
{
     Application.Run(new Form1());
}

修改此功能。 如果您看到命令行參數,請執行您必須執行的操作。 如果沒有,讓它用表格做它的正常魔法。 當你完成后,它將是這樣的:

public static void Main(string[] args)
{
    if (args.Length > 0) {
        // log in
        // do all the necessary stuff
    } else {
        Application.Run(new Form1());
    }
}

修改Main方法, Main方法應該是應用程序的入口點。 如果有任何參數,您不需要實例化並顯示任何表單,只需運行代碼即可在沒有UI的情況下完成工作。

    [STAThread]
    static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            // silent mode - you don't need to instantiate any forms
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

在解決方案中找到靜態主方法。 在該方法中,您將擁有Application.Run(new Form())或(form.Show()或ShowDialog())。 所以他們的關鍵是傳遞一個參數,告訴你現在調用這個方法(在表單上顯示方法)

關鍵是讓您的業務邏輯在一個獨立於您的類的類中,並在您希望擁有GUI或需要計划任務時使用此類

我剛才在這個問題上回答了這個問題

注意代碼塊之間的區別 - 第一個塊是無形的,第二個塊是標准的。

  if (ABCFile > 0)
  {
    var me = new MainForm(); // instantiate the form
    me.NoGui(ABCFile); // call the alternate entry point
    Environment.Exit(0);
  }
  else
  {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
  }

暫無
暫無

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

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