Hallo zusammen,
ich habe einen FileSystemWatcher, der ein lokales Verzeichnis samt Unterverzeichnisse überwachen soll und sich melden soll, wenn, in meinem Fall, sich an einer der dort liegenden XML-Dateien was ändert. Der Inhalt dieser Dateien wird auf der UI als TreeView dargestellt und dieser soll angepasst werden, wenn sich die Datei verändert.
Der FileSystemWatcher funktioniert dabei auch sehr gut, nur läuft dieser von sich aus schon in einem anderen Thread als die UI und hier kommt dann mein Problem.
Wie kann ich jetzt auf die Objekte der UI zugreifen und so ein aktualisieren des TreeViews auslösen?
Onkel Google hat viel über Dispatcher, Invoke, BeginInvoke usw. ausgespuckt, aber das hat alles irgendwie nicht funktioniert, bzw. ich weiß noch nicht mal so richtig, was ich da als Parameter so einem Invoke mitgeben muss, oder es ihm richtig mitgebe.
[highlight=c#]
void FSW_Changed(object sender, FileSystemEventArgs e)
{
if (e.Name.ToLower().EndsWith(".xml"))
{
// holt den Inhalt des XML und steckt ihn in den TreeView
this.GetXMLValues(this.GetItemByTag(e.FullPath)); // im Tag jedes TreeViewItems ist der Dateipfad des XML hinterlegt.
}
}
public TreeViewItem GetItemByTag(string tag, ItemCollection parentColl = null)
{
TreeViewItem returnItem = null;
ItemCollection searchColl = treeViewAdv1.Items;
if (parentColl != null) searchColl = parentColl;
// Das zu aktualisierende TreeView-Element finden
foreach (TreeViewItem item in searchColl)
{
if (item.Tag != null && item.Tag.ToString() == tag) returnItem = item; // hier kracht es wegen des threadübergreifenden Zugriffversuchs
if (returnItem == null && item.HasItems) returnItem = this.GetItemByTag(tag, item.Items);
}
return returnItem;
}
[/highlight]
Kann mir jemand sagen wie ich das richtig machen muss/kann?
Danke
Andi
ich habe einen FileSystemWatcher, der ein lokales Verzeichnis samt Unterverzeichnisse überwachen soll und sich melden soll, wenn, in meinem Fall, sich an einer der dort liegenden XML-Dateien was ändert. Der Inhalt dieser Dateien wird auf der UI als TreeView dargestellt und dieser soll angepasst werden, wenn sich die Datei verändert.
Der FileSystemWatcher funktioniert dabei auch sehr gut, nur läuft dieser von sich aus schon in einem anderen Thread als die UI und hier kommt dann mein Problem.
Wie kann ich jetzt auf die Objekte der UI zugreifen und so ein aktualisieren des TreeViews auslösen?
Onkel Google hat viel über Dispatcher, Invoke, BeginInvoke usw. ausgespuckt, aber das hat alles irgendwie nicht funktioniert, bzw. ich weiß noch nicht mal so richtig, was ich da als Parameter so einem Invoke mitgeben muss, oder es ihm richtig mitgebe.
[highlight=c#]
void FSW_Changed(object sender, FileSystemEventArgs e)
{
if (e.Name.ToLower().EndsWith(".xml"))
{
// holt den Inhalt des XML und steckt ihn in den TreeView
this.GetXMLValues(this.GetItemByTag(e.FullPath)); // im Tag jedes TreeViewItems ist der Dateipfad des XML hinterlegt.
}
}
public TreeViewItem GetItemByTag(string tag, ItemCollection parentColl = null)
{
TreeViewItem returnItem = null;
ItemCollection searchColl = treeViewAdv1.Items;
if (parentColl != null) searchColl = parentColl;
// Das zu aktualisierende TreeView-Element finden
foreach (TreeViewItem item in searchColl)
{
if (item.Tag != null && item.Tag.ToString() == tag) returnItem = item; // hier kracht es wegen des threadübergreifenden Zugriffversuchs
if (returnItem == null && item.HasItems) returnItem = this.GetItemByTag(tag, item.Items);
}
return returnItem;
}
[/highlight]
Kann mir jemand sagen wie ich das richtig machen muss/kann?
Danke
Andi
Comment