1

ウィンドウ フォームを表示せずに Windows アプリケーションを作成しました。アプリケーションを実行し続ける必要があります。すべてのコードを実行すると、アプリケーションが停止します。私は以下のような方法を試します。

public void RunForm()
{
    var frm=new Form();
    Application.Run(frm);

}

アプリケーションは停止されていませんが、フォームが表示されています。フォームを表示せずにアプリケーションを実行し続けるにはどうすればよいですか?

4

4 に答える 4

6

Application.Run()を呼び出すだけで、何も渡さないでください。Main()メソッドに属します。

これにより、メインスレッドがアクティブになり、Windows通知に応答し続けます。もちろん、ユーザーインターフェイスがなくなったので、それほど多くはありません。タイマーは動作します。NotifyIconが機能します。RegisterHotKey()をピンボーキングして登録されたホットキーが機能します。低レベルのWindowsフックが機能します。

そして、SystemEventsは機能します。これは重要です。ユーザーがWindowsをログオフまたはシャットダウンしていることを知るには、SessionEndingイベントをサブスクライブする必要があり、アプリを終了する必要があります。これは、Application.ExitThread()を呼び出すことによって行います。

于 2013-01-21T13:16:07.060 に答える
1

Application.Run()のインスタンスを取るオーバーロードを使用できますApplicationContext。実行を終了するApplicationContextには、明示的に呼び出す必要があります。Application.Exit()

public class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnabledVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        ApplicationContext context = new MyContext();
        Application.Run(context);
    }
}

public class MyContext : ApplicationContext
{
    //    ...
}
于 2013-01-21T13:09:22.907 に答える
1

アプリケーション/フォームをメニュー項目から閉じることができるように通知アイコンを追加するか、アプリケーションの代わりにサービスを作成することができます。

表示されていないときにアプリケーションが何をすべきか、およびサービスの機能が必要かどうかによって異なります (現在ログインしているユーザーがいないときに実行され、別のアカウントで実行されます)。

これら 2 つを組み合わせることもできます。サービスをインストールし、開始時にフォーム アプリケーションをサービスに接続します (WCF?)。このようにして、ユーザーはサービスの実行中にフォーム アプリケーションを閉じることができます。

于 2013-01-21T12:38:00.143 に答える
0

フォームを非表示にしたいだけですか?これの目的 (GUI のない GUI アプリケーションを持つこと) がわかりません。おそらく、代わりに Windows サービスを構築する必要があります。とにかく、フォームの読み込みイベントで、 を呼び出してフォームを非表示にすることができますthis.Hide()

于 2013-01-21T12:32:57.073 に答える