主线程上的InvokeRequired = true?

时间:2013-01-11 21:57:51

标签: invokerequired

我正在调试一个WinForm控件,它返回InvokeRequired = true虽然我在主线程上。 控件是否可能是非UI线程的子代? 我认为控件是一个UI组件,只能是UI线程的子项。

1 个答案:

答案 0 :(得分:0)

是的,有可能,控制是在应用程序(ui)线程之外的其他一些线程上创建的,请参见下面的示例。

        var task = Task<Button>.Factory.StartNew(() => {
            var button = new Button();
            var thisForcesControlToCreateHandle = button.Handle;
            return button;
        });
        var taskResult = task.Result;
        var invokeRequired = taskResult.InvokeRequired; // will be True

读取控制属性Handle非常重要,它会强制创建句柄,请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx表单更多信息。