C# 从 filesystemwatcher 事件处理程序引发 .net 程序集中的事件
C# Raising an event in a .net assembly from a filesystemwatcher event handler
我在 .net 中遇到跨线程通信问题。
我创建了一个没有 GUI 前端的 .NET 程序集。该程序集调用一个 FileSystemWatcher 来监视特定文件夹中是否有任何新创建的文件。创建文件时,我希望收到通知,以便我可以从文件中读取文本,然后从传递该数据的我自己的对象中引发事件。
出现的问题是我在尝试此操作时遇到以下错误。
"The calling thread cannot access this object because a different thread owns it"
下面是我的程序摘要。
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
你想要创建的文件或目录,假设它是一个文件,事件参数有你想要的数据。
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
我在 .net 中遇到跨线程通信问题。
我创建了一个没有 GUI 前端的 .NET 程序集。该程序集调用一个 FileSystemWatcher 来监视特定文件夹中是否有任何新创建的文件。创建文件时,我希望收到通知,以便我可以从文件中读取文本,然后从传递该数据的我自己的对象中引发事件。
出现的问题是我在尝试此操作时遇到以下错误。
"The calling thread cannot access this object because a different thread owns it"
下面是我的程序摘要。
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
你想要创建的文件或目录,假设它是一个文件,事件参数有你想要的数据。
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