在Windows窗体应用程序中挂钩消息循环?

时间:2016-04-24 15:10:44

标签: c# winforms

我需要在Windows窗体应用程序中挂钩消息循环以执行与滴答计数相关的工作。

我正在使用异步方法(async / await)开发tcp服务器,并且我避免在多线程进程中处理竞争条件 - 这基本上是我使用async / await而不是其他模型的原因。由于这个限制,我不能创建一个后台线程来进行滴答计数,因为这样我最终会得到一个多线程代码。

我认为一个选项以某种方式连接Windows窗体中的消息循环,所以我可以使用我的Windows窗体对象的相同线程轻松地完成与滴答计相关的东西,尽管我没有找到任何合适的方法或Windows.Forms.Application类中的事件。

任何人都知道如何做我需要的方法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我认为你最好的方法可能是使用一个定时器,它将按照定时间隔执行你的代码:

var aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 5000;
aTimer.Enabled = true;



// What you want to happen when the Elapsed event is raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    // Do something
}

答案 1 :(得分:1)

您不希望覆盖消息循环。在更原始的GUI解决方案中,这是一种非常常见的方法,但它实际上是.NET上的最后一种手段。

由于您只需要常规" tick",最合适的解决方案是计时器。由于您希望它在UI线程上运行,因此您应该使用System.Windows.Forms.Timer