sách gpt4 ai đã đi

.net - 从 DispatcherObject 继承

In lại 作者:行者123 更新时间:2023-12-03 13:17:52 26 4
mua khóa gpt4 Nike

我想创建 DispatcherObject 的子类使用消息队列创建我自己的线程关联对象,就像 WPF 用于 UI 元素一样。

我有一个运行没有崩溃的测试应用程序,但 DispatcherObject 似乎没有处理它的消息队列。我刚刚创建了一个新的空白 WPF 应用程序并将此代码添加到 MainWindow.xaml.cs :

public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();

DispatcherWorker worker = null;
ManualResetEventSlim latch = new ManualResetEventSlim(false);

new Thread(() => {
worker = new DispatcherWorker();
latch.Set();
}).Start();

latch.Wait();

// worker.Dispatcher.Thread is stopped by here... why?
worker.Dispatcher.BeginInvoke(new Action(() => {
// This code never executed
worker.DoWork(this);
}));
}
}

public class DispatcherWorker : DispatcherObject {

public void DoWork(MainWindow window) {
VerifyAccess();
window.Dispatcher.BeginInvoke(new Action(() => window.Background = Brushes.Black));
}
}
DoWork()方法永远不会执行,如果我在调用 BeginInvoke 之前放置一个断点,我看到 Dispatcher 的线程已停止。为什么停止了?我设置线程错误吗?

( This similar question 似乎有同样的问题,但接受的答案是在 GUI 应用程序中运行代码,这将有一个消息泵。但即使在 GUI 应用程序中运行,我也会遇到同样的问题。)

1 Câu trả lời

拥有 Dispatcher 的线程将需要“抽”Dispatcher .也就是说,需要告诉它处理通过 Dispatcher 排队的消息。 .为此,您使用 DispatcherFrame :

Dispatcher.PushFrame(new DispatcherFrame());

这应该在您设置闩锁后出现。该线程永远不会退出 - 它只会在该线程的调度程序上发送消息。如果您希望它具有退出条件,请参阅 DispatcherFrame 的文档。 Continue 属性(property)。

请注意,是否使用自定义 DispatcherWorker 无关紧要。类或其他一些内置的 WPF 类。如果没有东西抽 Dispatcher在该线程上,不会处理任何消息。

关于.net - 从 DispatcherObject 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360529/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com