C#从filesystemwatcher事件处理程序在.net程序集中引发事件

C#从filesystemwatcher事件处理程序在.net程序集中引发事件,c#,.net,multithreading,filesystemwatcher,C#,.net,Multithreading,Filesystemwatcher,我在.net中遇到跨线程通信问题 我创建了一个没有GUI前端的.NET程序集。此程序集调用FileSystemWatcher,该程序将监视特定文件夹中新创建的任何文件。创建文件时,我希望得到通知,以便从文件中读取文本,然后从传递该数据的我自己的对象引发事件 出现的问题是,当我尝试此操作时,出现以下错误 “调用线程无法访问此对象,因为其他线程拥有它” 下面是我的节目摘要 public void start() { _IncomingWatcher = new FileSystemWatch

我在.net中遇到跨线程通信问题

我创建了一个没有GUI前端的.NET程序集。此程序集调用FileSystemWatcher,该程序将监视特定文件夹中新创建的任何文件。创建文件时,我希望得到通知,以便从文件中读取文本,然后从传递该数据的我自己的对象引发事件

出现的问题是,当我尝试此操作时,出现以下错误

“调用线程无法访问此对象,因为其他线程拥有它”

下面是我的节目摘要

public void start()
{
    _IncomingWatcher = new FileSystemWatcher(strMessageInboundDir);
    _IncomingWatcher.Created += DataRecieved_Created;
    _IncomingWatcher.EnableRaisingEvents = true;
 }

-----------------------------------------------------------------------

private void DataRecieved_Created(object sender, FileSystemEventArgs e)
{
   var files = Directory.EnumerateFiles(strMessageInboundDir);
   foreach (string file in files)
   {

       var data = File.ReadAllText(file);
       data = ProcessMessageMCOINToADDN(data);

       if (DataRecieved != null)
       {
          MessageData tempmessage = new MessageData
          {
             MyEventString = data
          };
          DataRecieved?.Invoke(this, tempmessage);
       }
       File.Delete(file);
    }
}
任何帮助都将不胜感激

谢谢
J.W

如果要创建文件或目录,则假定它是一个文件,则事件args具有所需的数据

private void DataRecieved_Created(object sender, FileSystemEventArgs e)
{

   if ( System.IO.File.Exists(e.FullPath )) // Might Be a Directory
   {

   var data = File.ReadAllText(e.FullPath);
   data = ProcessMessageMCOINToADDN(data);

   if (DataRecieved != null)
   {
      MessageData tempmessage = new MessageData
      {
         MyEventString = data
      };
      DataRecieved?.Invoke(this, tempmessage);
   }
    File.Delete(e.FullPath);

    }
}
有关FileSystemEventArgs的更多信息,请参见:

https://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs(v=vs.110).aspx

谢谢你帮了大忙,我的头撞到墙上了。