我想在OnChanged方法中更改GUI属性...(实际上我试图设置图像源..但为了简单起见,这里使用了一个按钮).每次filesystemwatcher检测到文件中的更改时都会调用它.它会转到"顶部"输出..但在尝试设置按钮宽度时会捕获异常.
但如果我把相同的代码放在一个按钮..它的工作正常.我真诚地不明白为什么..能有人帮助我吗?
private void OnChanged(object source, FileSystemEventArgs e)
{
//prevents a double firing, known bug for filesystemwatcher
try
{
_jsonWatcher.EnableRaisingEvents = false;
FileInfo objFileInfo = new FileInfo(e.FullPath);
if (!objFileInfo.Exists) return; // ignore the file open, wait for complete write
//do stuff here
Console.WriteLine("top");
Test_Button.Width = 500;
Console.WriteLine("bottom");
}
catch (Exception)
{
//do nothing
}
finally
{
_jsonWatcher.EnableRaisingEvents = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我真的想做什么,而不是改变按钮宽度:
BlueBan1_Image.Source = GUI.GetChampImageSource(JSONFile.Get("blue ban 1"), "avatar");
Run Code Online (Sandbox Code Playgroud) 我在这里和其他网站浏览了不少线程,以解决这个问题.
这是我的FileMonitor类:
class FileMonitor
{
public FileMonitor(String path)
{
try
{
var watcher = new FileSystemWatcher()
{
Path = path,
IncludeSubdirectories = true,
InternalBufferSize = 65536,
EnableRaisingEvents = true
};
watcher.Changed += new FileSystemEventHandler(OnFileChanged);
watcher.Created += new FileSystemEventHandler(OnFileCreated);
watcher.Deleted += new FileSystemEventHandler(OnFileDeleted);
watcher.Renamed += new RenamedEventHandler(OnFileRenamed);
watcher.Error += new ErrorEventHandler(OnWatcherError);
}
catch (Exception)
{
throw;
}
}
private void OnWatcherError(object sender, ErrorEventArgs e)
{
}
private void OnFileChanged(object sender, FileSystemEventArgs e)
{
try
{
((FileSystemWatcher)sender).EnableRaisingEvents = false;
LogFileSystemChanges(e);
}
finally …Run Code Online (Sandbox Code Playgroud) 我可以在主UI线程上获得filesystemwatcher事件吗?目前,文件更改将在其自己的线程上触发.