在 WPF 中,我可以使用Dispatcher.PushFrame
.
WinForms 中的等价物是什么?我很熟悉,DoEvents
但必须在一个循环中调用它,它可以旋转 CPU,而不是等待消息或事件发出信号退出的非常有效的方法(就像Dispatcher.PushFrame
有)。
在 WPF 中,我可以使用Dispatcher.PushFrame
.
WinForms 中的等价物是什么?我很熟悉,DoEvents
但必须在一个循环中调用它,它可以旋转 CPU,而不是等待消息或事件发出信号退出的非常有效的方法(就像Dispatcher.PushFrame
有)。
我能够包含WindowsBase
到我的项目的引用中,并且像往常一样使用Dispatcher.PushFrame
和。frame.Continue = false
wpf-winforms interop 的任何警告都适用,它确实需要引用 wpf 的一部分,但它仍然应该比DoEvents
(它有严重的缺陷)更好。
这是等价的:
System.Threading.SendOrPostCallback callback = o =>
{
this.Text = "Hello" + o.ToString(); // "Hello42"
};
WindowsFormsSynchronizationContext.Current.Post(callback, 42);
42 是state
传递给回调的参数。
你也可以这样做:
this.BeginInvoke((Action)(() => this.Text = "Hello"));
顺便说一句,你永远不应该使用DoEvents
- 这是在你的代码中引入错误的好方法,并且真的只存在于 VB6 兼容性。