【问题标题】:C# Raising an event in a .net assembly from a filesystemwatcher event handlerC# 从 filesystemwatcher 事件处理程序引发 .net 程序集中的事件
【发布时间】:2018-01-25 21:45:33
【问题描述】:

我在 .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

【问题讨论】:

    标签: c# .net multithreading filesystemwatcher


    【解决方案1】:

    你想要创建文件或目录,假设它是一个文件,事件 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
    

    【讨论】:

    • 谢谢你帮了我很多忙,我的头撞在墙上了。
    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多