|
|
1
1
每个线程都有自己的dispatcher对象-由dispatcher.currentdispatcher返回 方法是通过在ui线程上调用上述方法来缓存目标dispatcher对象一次。然后像使用一样使用cachedobj.invoke-将其封送到正确的线程。 wpf ui具有“线程关联性”-ui只能由创建它的线程访问。 更新:不确定你想达到什么目标。但是下面的代码片段对我有效。
|
|
2
15
从不同的线程在同一个调度程序上调用pushframe是没有意义的,你没有写下你想要解决的问题,但是基于pushframe的解决方案可能是错误的。 Dispatcher对象负责为单个线程执行代码和分派事件,每个线程都有一个由操作系统发送的消息队列,其中包括鼠标单击之类的通知,Dispatcher有一个读取此队列并调用相应事件的循环。 有时必须在不从方法返回调度程序循环的情况下处理消息,这方面的一个很好的例子是模式对话框,它响应用户输入(因此它们需要处理消息),而不会中断调用它们的方法的控制流。 pushframe就是这么做的-它在代码中运行dispatcher循环。 每个线程(可选)都有自己的消息队列,这些消息特定于属于该线程的窗口和控件,不能从另一个线程处理线程的消息队列(Windows本身没有允许您读取另一个线程消息的API)。 从另一个线程调用pushframe无法工作,因为您的调用发生在错误的线程上,pushframe本身必须在由调度程序管理的同一个线程上调用,不能在另一个线程上调用它,因为它试图在另一个线程上处理线程的消息。 在这里使用invoke或begininvoke也没有意义,因为传递给这些方法的委托仅在Dispatcher处理消息时才被调用,如果Dispatcher已经在处理消息,则无需调用pushFrame使其处理消息。 如果你问另一个问题描述你想做什么,这里的人可能会帮助你,但是从不同线程调用dispatcher.pushframe永远不会起作用。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |