在 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 兼容性。