c# - 从Windows Mobile中的其他线程控制表单元素

标签 c# forms windows-mobile

试图获取一个线程来更改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/

相关文章:

c# - 没有网络时 ClickOnce 初始化失败

javascript - React 初学者在将 Material-UI 示例应用到 React 项目时遇到问题。 State 与 Hooks 的工作方式不同

c# - 如何从 Windows-mobile 获取 MAC 地址?

visual-studio-2015 - Visual Studio项目需要部署后才能启动

c# - 导出数据到excel mobile

c# - 在 Metro Windows 8 中将 ImageSource 转换为 WriteableBitmap

c# - 在引发事件的方法上编写代码契约

javascript - 没有 jQuery 或 Ajax 的链式选择

javascript - 如何将表单值提交到由 FORM 输入值组成的 URL?

c# - 如何将控制台应用程序转换为 Windows 服务?