使控制台应用程序的行为类似于Windows应用程序
使控制台应用程序的行为类似于Windows应用程序
我有一个控制台应用程序,并且我希望它等待某个事件被触发。但是它执行代码后就退出了:
static void Main(string[] args) { var someObjectInstance = new SomeObject(); someObjectInstance.SomeEvent += SomeEventHandler; } static void SomeEventHandler() { //Some logic }
我希望我的应用程序的行为像一个Windows应用程序,调用`Application.Run(new Form1())`并运行消息循环。
但是我既不需要消息循环,也不需要任何窗体。所以看起来有点多余。有没有更轻量级的方法来实现我的目标?
问题描述:如何使控制台应用程序表现得像Windows应用程序。
问题原因:控制台应用程序没有定义Application
,因此无法使用Application.DoEvents()
方法。此外,使用Thread.Sleep()
会导致CPU占用率过高。
解决方法:使用Windows Forms应用程序,创建一个Windows Forms消息泵,然后在消息泵中使用Application.DoEvents()
方法。这样可以使控制台应用程序表现得像Windows应用程序。
代码如下:
while (true)
{
Application.DoEvents();
Thread.Sleep(this.SleepTime);
}
问题的原因是想要将一个控制台应用程序的行为像一个Windows应用程序一样。解决方法是使用ManualResetEvent类的实例来等待事件的发生,并在事件处理程序中将事件设置为继续执行主方法,从而退出程序。下面是一个示例代码:
using System; using System.Threading; 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 }
ManualResetEvent类是在System.Threading命名空间中定义的。更推荐使用ManualResetEventSlim类。
希望对您有所帮助,谢谢!