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' は、それが作成されたスレッド以外のスレッドからアクセスされました。」

この問題を解決するのを手伝ってくれる人はいますか? 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 に答える