Entwickler-Ecke
Sonstiges (.NET) - Explorer hängt bei File Drop
ebber - So 25.01.09 19:11
Titel: Explorer hängt bei File Drop
Hallo,
ich habe ein Programm in das ich vom Windows Explorer Dateien reinziehen möchte. Das funktioniert auch. So:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void SeFiWin_Drop(object sender, DragEventArgs e) { if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList()) { foreach (string filePath in ((DataObject)e.Data).GetFileDropList()) { WindowAdd winAdd = new WindowAdd(this, filePath); winAdd.ShowDialog(); } } } |
Aber solange wie das läuft hängt der Explorer. Also so wie ich das sehe liegt das am ShowDialog. Aber wie kann ich das umgehen?
MfG
jaenicke - So 25.01.09 19:57
Du müsstest die Dateiliste dort nur auslesen und die Dialoge erst nach dem Ende von SeFiWin_Drop anzeigen.
Wie man dies am besten mit C# löst kann ich dir leider nicht sagen.
Kha - So 25.01.09 20:05
Das sollte mit BeginInvoke möglich sein: Schickt eine Windows-Message los, die erst nach Beenden des Drag-Vorgangs verarbeitet wird und den Delegate aufruft.
ebber - So 25.01.09 20:34
Danke. Das hat funktioniert.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| delegate void InsertDropsInvoke(DataObject da); private void SeFiWin_Drop(object sender, DragEventArgs e) { if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList()) { this.Dispatcher.BeginInvoke(new InsertDropsInvoke(InsertDrops), ((DataObject)e.Data)); }
e.Handled = true; }
private void InsertDrops(DataObject da) { foreach (string filePath in da.GetFileDropList()) { WindowAdd winAdd = new WindowAdd(this, filePath ); winAdd.ShowDialog(); } } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!