【发布时间】:2014-02-14 00:43:12
【问题描述】:
我正在编写一个包含两部分的应用程序,一部分下载数据并将其来源列出在一个文件中,该文件由另一部分监控,每 15 分钟下载数据因此更新文件,它会加载文件内容并删除旧数据。我目前有这个代码:
private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
try
{
fsw.EnableRaisingEvents = false;
MessageBox.Show("File Changed: " + e.FullPath);
_times.Clear();
XmlDocument dataset = new XmlDocument();
dataset.Load(@"C:\Users\Henry\AppData\Local\{9EC23EFD-F1A4-4f85-B9E9-729CDE4EF4C7}\cache\DATA_RAINOBS\dataset.xml");
for (int x = 0; x < dataset.SelectNodes("//Times/Time").Count; x++)
{
_times.Add(
new Time()
{
Original = dataset.SelectNodes("//Times/Time/@original")[x].InnerText,
Display = dataset.SelectNodes("//Times/Time/@display")[x].InnerText,
Directory = dataset.SelectNodes("//Times/Time/@directory")[x].InnerText + "_LORES.png"
});
}
times.SelectedIndex = 0;
}
finally { fsw.EnableRaisingEvents = true; }
}
但是当我运行它时,我得到一个 System.NotSupportedException 并且从进一步的信息中我知道这是因为我试图从 FileSystemWatcher 创建的单独线程中操作一个列表。
我几乎没有使用多线程进行任何编程,所以我不知道该怎么做。如果有人可以修改上面的代码以使其成为线程安全并且可以正常工作,那将非常有帮助,因为这样我将有一些东西可以学习并且不会出错。我该如何完成这项工作?
【问题讨论】:
-
哪一行导致异常?
-
错误中突出显示的行是 XmlDocument 的创建: XmlDocument dataset = new XmlDocument();错误是:这种类型的collectionview不支持从不同线程更改其sourcecollection
-
@HenryHunt - 在此处发布您收到的实际异常消息。
-
@RohitVats 在 PresentationFramework.dll 中发生“System.NotSupportedException”类型的未处理异常附加信息:这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。跨度>
-
@HenryHunt - 我已经发布了答案。请检查。