作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 WPF 应用程序中有这个简单的代码:
ThreadStart start = delegate()
{
Thread.Sleep(5000);
Console.WriteLine("HEY!");
Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(
delegate()
{
Console.WriteLine("Inside invoke?!");
}
)
);
};
new Thread(start).Start();
嘿!
会在片刻后正常打印,并且应用程序不会像使用线程所期望的那样被阻塞,但是,为什么我从来没有看到内部调用?!
?我还尝试了不同的优先级,例如 Send
,我认为这是最高优先级。
我也试过在里面放断点,但它从未停在那里。
最佳答案
先了解一些基础知识 -
代码问题 -您正在将委托(delegate)放置在您创建的辅助线程的 Dispatcher 队列中。但是在辅助线程有时间执行它之前,您的辅助线程退出了,因此它的调度程序也退出了。这就是委托(delegate)永远不会被执行的原因。
有两种方法可以实现这一点-
像这样在调度程序上同步地排队委托(delegate) -
Dispatcher.CurrentDispatcher.Invoke(
DispatcherPriority.Normal,
new Action(
delegate()
{
Console.WriteLine("Inside invoke?!");
}
)
);
或者您可以像这样在主线程(通常称为 UI 线程)的调度程序上将其排队 -
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(
delegate()
{
Console.WriteLine("Inside invoke?!");
}
)
);
关于c# - BeginInvoke 未在 WPF 应用程序的线程内触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178334/
我是一名优秀的程序员,十分优秀!