试图获取一个线程来更改Windows Mobile中的表单控件。
引发不受支持的异常。
这是否意味着根本无法完成?
如果没有,我该如何处理?在父/主线程中创建表单,然后创建一个线程在后台执行一些工作,但是我要创建它,以便后台线程可以更新表单以显示其完成的内容...
最佳答案
您不能在非GUI线程上访问GUI项目。您将需要确定GUI线程是否需要调用。例如(这是我之前做的):
public delegate void SetEnabledStateCallBack(Control control, bool enabled);
public static void SetEnabledState(Control control, bool enabled)
{
if (control.InvokeRequired)
{
SetEnabledStateCallBack d = new SetEnabledStateCallBack(SetEnabledState);
control.Invoke(d, new object[] { control, enabled });
}
else
{
control.Enabled = enabled;
}
}
要么
public delegate void AddListViewItemCallBack(ListView control, ListViewItem item);
public static void AddListViewItem(ListView control, ListViewItem item)
{
if (control.InvokeRequired)
{
AddListViewItemCallBack d = new AddListViewItemCallBack(AddListViewItem);
control.Invoke(d, new object[] { control, item });
}
else
{
control.Items.Add(item);
}
}
然后,您可以使用
ClassName.SetEnabledState(this, true);
设置enabled属性(从我的第一个示例开始)。关于c# - 从Windows Mobile中的其他线程控制表单元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3037272/