Laden...

WPF Window sperren

Erstellt von winmike vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.425 Views
winmike Themenstarter:in
173 Beiträge seit 2009
vor 14 Jahren
WPF Window sperren

Hi

Ich hab mir Testhalber mal ein kleines Fenster gebastelt, welches angezeigt wird, wenn WCF sendet:


public partial class WCFWorkerWindow : Window
{
    private Queue<BackgroundWorker> workerQueue = new Queue<BackgroundWorker>();
    private object lockObject = new object();

    public WCFWorkerWindow()
    {
        InitializeComponent();            
    }

    public void AddBackgroundWorker(DoWorkEventHandler eventHandlerWork, RunWorkerCompletedEventHandler eventHandlerCompleted)
    {
        BackgroundWorker worker = new BackgroundWorker();

        worker.DoWork += eventHandlerWork;
        worker.RunWorkerCompleted += eventHandlerCompleted;
        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);

        lock (lockObject)
        {
            workerQueue.Enqueue(worker);               

            if (workerQueue.Count == 1)
            {
                workerQueue.Peek().RunWorkerAsync();
                this.Visibility = Visibility.Visible;
            }
        }
    }

    void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        lock (lockObject)
        {
            workerQueue.Dequeue();

            if (workerQueue.Count != 0)
            {
                workerQueue.Peek().RunWorkerAsync();
                this.Visibility = Visibility.Visible;
            }
            else
            {
                this.Visibility = Visibility.Hidden;
            }
        }            
    }
}

Man kann also von außen eine Arbeit registrieren und das Fenster wird dann angezeigt und Aufgabe für Aufgabe abgearbeitet (will gewisse Reihenfolgen einhalten). Jedoch kann man in dem Hauptfenster trotzdem noch schreiben. Kann man das irgendwie unterbinden ohne jetzt jedes Item zu disabeln? So ne Art ShowDialog (obwohl ShowDialog auch Unsinn ist - wenn man auf die Haupt GUI klickt passiert solange der Dialog offen ist nichts - die Klick-Events werden aber alle nachgereicht). So eine Sperre wie bei Windows UAC wäre cool 😉

WCFWorkerWindow ist Singleton

Danke
LG

U
1.578 Beiträge seit 2009
vor 14 Jahren

da haette ich ne idee - weiss aber nicht obs praktikabel ist oder ueberhaupt funzt
pack das gesamte fenster in einem grid - und ganz oben drueber (on top sozusagen) ist ein rectangle
dieses hat die farbe Transparent
und immer wenn der worker aktiv ist, ist dieses rectangle Visible
dann faengt dies alle klicks ab ohne das man etwas sieht #gg

1.985 Beiträge seit 2004
vor 14 Jahren

Hallo winmike,

basierend auf der Idee von Mr Evil würde ich dafür einen Adorner benutzen. Der macht im Prinzip genau das von Mr Evil vorgeschlage, ist aber wesentlich einfacher und WPF-konformer zu benutzen.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

winmike Themenstarter:in
173 Beiträge seit 2009
vor 14 Jahren

Hi

Danke für die Antworten. Habe schon einen Code gefunden:
http://stackoverflow.com/questions/173652/how-do-i-make-modal-dialog-for-a-page-in-my-wpf-application/173769#173769

Der hat es mit einem Control gemacht. Werde mich mal an die Umsetzung machen 😃

LG

EDIT:
@Fabian: Adorner macht genau das was ich brauche - ich glaub ich muss mein WPF Buch nochmals lesen - kannte ich gar net 😃

1.985 Beiträge seit 2004
vor 14 Jahren

Hallo winmike,

ich glaub ich muss mein WPF Buch nochmals lesen - kannte ich gar net 😃

egal wie viele Bücher man über WPF liest, ich glaube, es gibt immer etwas, das man noch nicht weiß 😉. WPF ist einfach sehr komplex. Und verdammt spaßig 😃.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de