2009-05-05 10 views
1

Bei der Anwendung auf ich arbeite, habe ich versucht, die Savefiledialog und Openfile für ihren üblichen Zweck zu verwenden (Dateien speichern und öffnen.)Ersetzen Openfile/Savefiledialog in .net

jedoch kann die Anwendung modale Formen/Dialoge nicht unterstützen, ohne abzustürzen, weil zu viele zeitkritische Dinge auf dem Thread passieren, der die UI besitzt.

die Anwendung Umschreiben diese Funktionen aus dem UI-besitzenden Thread zu bewegen, ist in nächster Zukunft nicht praktikabel. Um das Feature zu beenden, an dem ich gearbeitet habe, brauche ich einen Ersatz für die zwei Dateidialoge, vorzugsweise ein Steuerelement, das auf einer nicht-modalen Form leben kann.

Gibt es irgendetwas gibt, das kann ich verwenden werde mein UI-besitzenden Block nicht Thread?

Antwort

1

Die einzige vorhandene Option, die ich kenne, ist Dialog Workshop.NET, ein kommerzielles Produkt. Sie haben eine Reihe von Dialogen, die die Option haben, nicht modal zu sein (oder direkt in ein Windows-Formular statt in ein separates Fenster eingebettet zu sein).

Allerdings würde ich wirklich darüber nachdenken, versuchen, Ihre Zeit sensible Logik in einen separaten Thread zu bewegen, statt. Wenn Sie einen nicht modalen Dialog verwenden, werden Benutzer möglicherweise verwirrt, da er sich nicht wie ein Dateidialog verhält. Es gibt auch andere mögliche Konsequenzen für eine nicht blockierbare Benutzeroberfläche. diese Funktionen von dem UI-besitzenden Thread zu bewegen ist nicht praktikabel, in dem unmittelbaren Begriff

+0

Wie ich in der ursprünglichen Frage geschrieben habe (und oben wiederholt wurde), ist das Umschreiben der Anwendung, um diese Funktionen von dem UI-Besitz-Thread zu entfernen, in der unmittelbaren Zeit nicht praktisch. Natürlich wollen wir das irgendwann tun, aber es ist eine große Aufgabe, die Eingeweide einer Anwendung neu zu ordnen, die ungefähr 500 klocs umfasst. –

+0

@Jekke: Es gibt eine Option dort, die das nicht erfordert - ich habe nur gesagt, dass ich glaube, dass das tun lohnt, und sollte in Betracht gezogen werden, obwohl es klingt wie du hast. Der Dialog Workshop.NET wird Ihnen jedoch für die unmittelbare Laufzeit billige, nicht modale Dialogfenster zur Verfügung stellen. –

2

zu viele zeitkritische Dinge passieren auf dem Thread, der die UI besitzt.

Das ist Ihr echtes Problem. .Net hat eine sehr robuste Multithreading-Unterstützung. Ich schlage vor, dass Sie diese Dinge woanders hinschieben, obwohl es so unangenehm ist. Es ist wahrscheinlich weniger Arbeit, als die Open/Save-Dialoge neu zu implementieren und wird auf lange Sicht definitiv weniger für Ihre App sein.

+0

Wie ich bereits in der ursprünglichen Frage schrieb, die Anwendung neu zu schreiben. Natürlich wollen wir das irgendwann tun, aber es ist eine große Aufgabe, die Eingeweide einer Anwendung neu zu ordnen, die ungefähr 500 klocs umfasst. –