我有一个表格。
在这种形式中,我在一个新线程上创建了一个类的实例,因为它运行了一些长时间运行的逻辑。该表单还使用户能够取消此逻辑/线程。
如果需要输入,该类会打开一个新表单。
新表格有时会出现在其他表格的后面。
我在类上设置了一个属性:
public Form ParentForm{get;set;}
我现在可以这样做:
MyForm form = new MyForm();
form.ShowDialog(ParentForm);
但是我在调用时遇到了跨线程异常ShowDialog(ParentForm)
。
我知道我可以InvokeRequired
以某种方式使用,但不确定如何在属性上使用。
谢谢
更新:尝试过这样做但仍然出现异常:
MyForm form = new MyForm();
form.ShowDialog(GetParentForm());
private Form GetParentForm()
{
//You have to Invoke() so you can wait for the function to return and obtain its return value.
if (ParentForm.InvokeRequired)
{
return (Form)ParentForm.Invoke(new Func<Form>(() => GetParentForm()));
}
else
{
return ParentForm;
}
}