0

可能重复:
跨线程操作无效:从线程访问的控件不是在它创建时创建的
线程 跨线程操作无效

这是我的方法:(我已经看到了其他几个与跨线程相关的答案,但我不理解这些解决方案如何适合我的特定情况。)

private void live_refresh()
{
    while (true)
    {
            viewBackup.Nodes.Clear();
            Control.storage.refresh_files_list();
            viewBackup.Nodes.Add(Control.storage.get_files_node());

            List<FileInfo> list = Control.sched.get_difference();
            this.viewCopy.Items.Clear();
            foreach (FileInfo file in list)
                this.viewCopy.Items.Add(file.FullName.Substring(Control.filer.get_path().Length + 1));
        }
    }
}

抛出异常:“跨线程操作无效:控件'viewBackup'从创建它的线程以外的线程访问。”

any1 可以帮我解决这个问题吗?除了 Invoke() 还有什么办法吗?我不明白。。

4

1 回答 1

2

使用Invoke从非 UI 线程更新 UI。要确定 UI 线程,请使用InvokeRequired

// Invoke version of your code sample:

private void live_refresh()
{
  if(viewBackup.InvokeRequired)
  {
    viewBackup.Invoke(new MethodInvoker(live_refresh));
    return ;
  }
  while(true)
  ....
  .....
}
于 2012-12-26T17:58:42.617 回答