基本上FileSystemWatcher
更改了列表项的属性,导致List_Changed
事件被触发:
void sounds_ListChanged(object sender, ListChangedEventArgs e)
{
UnsafedChanges = true;
Gui.soundsDataGridView.AutoResizeColumns();
}
此处抛出异常:
private bool unsafedchanges = false;
public bool UnsafedChanges
{
get
{
return unsafedchanges;
}
set
{
unsafedchanges = value;
if (!value)
Gui.Text = soundsXMLFilePath;
else
Gui.Text = " * " + soundsXMLFilePath; // thrown here
}
}
其中Gui
是我的Windows窗体应用程序的主要形式,该代码由构造函数提供给类。
soundsXMLFilePath
:
public string soundsXMLFilePath {
get{
return soundsxmlfilepath;
}
set{
bool changed = soundsxmlfilepath != value;
soundsxmlfilepath=value;
if (changed)
Gui.Text = value;
}
}
现在我知道Invoke
,问题是我不明白为什么抛出异常:根据我的理解,只有主线程,因为我无法想到一个在某个地方被启动。 FileSystemWatcher
引发一个事件,一个属性被更改,导致List_Changed
被调用,它再次设置一个属性,最终设置了Form
对象的文本。第二个帖子在哪里?
谢谢。
答案 0 :(得分:4)
此处解释了您的要求FileSystemWatcher.SynchronizingObject Property。
<强>说明强> 当SynchronizingObject为null时,将在系统线程池的线程上调用处理Changed,Created,Deleted和Renamed事件的方法。有关系统线程池的更多信息,请参阅ThreadPool。
它还包含解决方案 - 只需将其设置为您的表单或对其进行一些控制,如此
// inside a form
yourFileSystemWatcher.SynchronizingObject = this;
答案 1 :(得分:0)
您的Windows窗体有一个线程,而FileSystemWatcher有一个线程 - 两个线程。