none
Aktualisieren von IsActive-Eigenschaft eines ProgressRings RRS feed

  • Frage

  • Hallo,

    ich habe folgendes Problem: Ich möchte während eines Aufrufs einer Render-Funktion (die u.U. mehrere Sekunden dauern kann) einen ProgressRing aktivieren und diesen wieder deaktivieren, sobald die Funktion beendet ist. Der ProgressRing ist an den UI-Thread gebunden weshalb folgendes nicht funktioniert

    ProgressRing1->IsActive = true;
    
    auto task1 = create_task([this]{
    	Render2();
    }).then([this] {
    	ProgressRing1->IsActive = false;
    });

    , denn hierbei wird die auf ProgressRing-Eigenschaft IsActive von einem Thread als dem UI-Thread zugegriffen. Der Versuch, auf die Beendigung des Tasks zu warten, funktioniert ebenfalls nicht:

    ProgressRing1->IsActive = true;
    auto task1 = create_task([this]{
    	Render2();
    });
    
    task1.wait();
    
    ProgressRing1->IsActive = false;

    Dabei tritt folgender Fehler auf:

    Ausnahme ausgelöst bei 0x00007FF8E77DA1C8 in App2.exe: Microsoft C++-Ausnahme: Concurrency::invalid_operation bei Speicherort 0x000000646881CAA8.

    Ausnahmefehler bei 0x00007FF8C666FE8B (ucrtbased.dll) in App2.exe: Ein ungültiger Parameter wurde an eine Funktion übergeben, die ungültige Parameter als schwerwiegend einstuft.

    Wie könnte eine Lösung dafür aussehen?

    Danke für eure Hilfe im Voraus!

    Sonntag, 4. Oktober 2015 09:49

Antworten

  • Ich hab jetzt eine Lösung gefunden (Der Code ist übrigens C++ ;) )

    ProgressRing1->IsActive = true;
    
    auto task1 = create_task([this]{
    	Render2();
    }).then([this]
    {
    	ProgressRing1->IsActive = false;
    }, task_continuation_context::use_current());
    Dabei wird vom UI-Thread auf den ProgressRing zugegriffen und es funktioniert einwandfrei.

    Montag, 5. Oktober 2015 15:29

Alle Antworten