使控制台应用程序的行为类似于Windows应用程序

Sib*_*Guy 12 .net c#

我有一个控制台应用程序,我希望它等到某个事件被提出.但它执行代码并退出:

static void Main(string[] args)
{
    var someObjectInstance = new SomeObject();
    someObjectInstance.SomeEvent += SomeEventHandler;
}

static void SomeEventHandler()
{
    //Some logic
}
Run Code Online (Sandbox Code Playgroud)

我想让我的应用程序像Windows应用程序一样

Application.Run(new Form1());
Run Code Online (Sandbox Code Playgroud)

被调用并运行消息循环.

但我既不需要消息循环也不需要任何形式.所以它看起来像开销.是否有更轻量级的方式来实现我的目标?

Ree*_*sey 22

首先,除非SomeObject要在单独的线程上引发事件,否则如果没有某种形式的处理,这将无法工作SomeObject.但是,如果按照这种方式设计,这是相当简单的.

处理此问题的一种非常有效的方法是等待WaitHandle:

private static ManualResetEvent waitHandle = new ManualResetEvent(false);
static void Main(string[] args)
{
    var someObjectInstance = new SomeObject();
    someObjectInstance.SomeEvent += SomeEventHandler;
    waitHandle.WaitOne(); // Will block until event occurs
}

static void SomeEventHandler()
{
    //some logic
    waitHandle.Set(); // Will allow Main() to continue, exiting the program
}
Run Code Online (Sandbox Code Playgroud)