首页 > 解决方案 > 如何在控制台应用程序中将执行从工作线程切换到主线程?

问题描述

我有一个 .NET 控制台应用程序,除其他外,它侦听各种外部事件(websockets、udp 等......)。当事件到达时,它会在工作线程上执行此操作。我正在尝试将事件处理编组到主线程(定义为 void Main() 被启动的位置)。

之前有人问过类似的问题,但它涉及调用 Windows API。它让我尝试了各种最终不起作用的想法。

我知道要编组线程,您必须有 SynchronizationContext 和控制台应用程序,与 WinForms 和 WPF 不同,没有它。

我尝试使用自定义SyncronizationContext,但它只是不编组线程。

那么在这样的代码中,是否可以将执行编组到主线程?

static void Main() {
  WebSocketListener.Register(ReceiveMessages);
}

static void ReceiveMessages(Message message) {
  // fires on a worker thread
  MarshalToMainThread.Post(() => ProcessOnMainThread());
}

static void ProcessOnMainThread() {

}

标签: c#.netmultithreadingconsole-application

解决方案


推荐阅读