跨线程操作无效:从创建它的线程以外的线程访问控件

7 file-io

我正在编写一个filewatcher Windows应用程序,它将查找指定文件夹中的更改,然后将详细信息记录在txt文件中.

我完全按照以下文章中提到的那样 http://www.codeproject.com/KB/dotnet/folderwatcher.aspx

当我从我的应用程序中按F5然后创建或修改正在监视的文件夹中的文件时,它会抛出下面提到的错误.

请帮忙

跨线程操作无效:控制'txtFolderActivity'从其创建的线程以外的线程访问.

小智 10

您必须在表单上使用Invoke方法,例如使用匿名委托来对事件做出更改.

事件处理程序是用另一个线程引发的.第二个线程无法访问表单中的控件.它必须"调用"它们让线程完成所有控制最初创建它们的工作.

代替:

myForm.Control1.Text = "newText";
Run Code Online (Sandbox Code Playgroud)

你必须写:

myForm.Invoke(new Action(
delegate()
{
  myForm.Control1.Text = "newText";
}));
Run Code Online (Sandbox Code Playgroud)


Meh*_*ras 5

您正在尝试从非 UI 线程更新 UI。UI 具有线程关联性,并且只能从创建它的线程进行更新。如果您使用的是 WinForms,请查看如何:对 Windows 窗体控件进行线程安全调用MSDN 文章。基本上,您需要通过Control.Invoke方法更新 UI 。对于 WPF,您需要使用DispatcherObject