1

在 WPF 中,我可以使用Dispatcher.PushFrame.

WinForms 中的等价物是什么?我很熟悉,DoEvents但必须在一个循环中调用它,它可以旋转 CPU,而不是等待消息或事件发出信号退出的非常有效的方法(就像Dispatcher.PushFrame有)。

4

2 回答 2

1

我能够包含WindowsBase到我的项目的引用中,并且像往常一样使用Dispatcher.PushFrame和。frame.Continue = false

wpf-winforms interop 的任何警告都适用,它确实需要引用 wpf 的一部分,但它仍然应该比DoEvents(它有严重的缺陷)更好。

于 2019-09-07T19:26:52.013 回答
-1

这是等价的:

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

于 2016-02-01T06:56:37.370 回答