C# 控制台应用程序中的调度程序问题

Fan*_*nda 2 c# multithreading dispatcher

我需要在正确的工作线程上调用在计时器线程上运行的方法。Invoke/BeginInvoke 流程对我有用。有2个线程共享一个线程间数据容器进行数据交换。一种是填充队列,一种是处理队列。如果队列在空状态后已满,则会引发事件。所有问题都是由计时器引起的,计时器在其经过的事件上打开新线程。我正在使用调度程序在正确的线程上调度,但除了这个调度程序之外,一切正常。:-)

请问有人看出问题出在哪里了吗?

完整的测试代码在这里: http: //pastebin.com/jqYbR9PS

调试输出是这样的:

App Thread ID: 9
Processor Thread ID: 10
Processor Dispatcher Thread ID: 10
The thread '<No Name>' (0x888) has exited with code 0 (0x0).
Processor QueueListener caller Thread ID: 12
Processor Dispatcher Thread ID: 10
Processor invoking ProcessQueue.
...here shut be processing output...
Processor invoked ProcessQueue.
App Thread ID on end: 9
The thread 'vshost.RunParkingWindow' (0x17c4) has exited with code 0 (0x0).
The thread '<No Name>' (0x820) has exited with code 0 (0x0).
The program '[5760] TestingConsoleApplication.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

ProcessQueue 永远不会被调用/调用。

谢谢。

shf*_*301 6

您需要通过调用Dispatcher.Run()来实际启动调度程序,以便调度程序处理对其调用的调用。

从控制台应用程序使用 Dispatcher 非常奇怪 - Dispatcher 用于 WPF 应用程序,但我想它会起作用。

请注意,调用Dispatcher.Run()不会返回 - 它将进入循环,直到您调用Dispatcher.BeginInvokeShutdown()

请参阅此博客文章的示例。