我正在调试一个WinForm控件,它返回InvokeRequired = true虽然我在主线程上。 控件是否可能是非UI线程的子代? 我认为控件是一个UI组件,只能是UI线程的子项。
答案 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表单更多信息。