myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Event-Daten aus await Task.Run(() => im UI anzeigen.
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Event-Daten aus await Task.Run(() => im UI anzeigen.

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Quia_Respexit
myCSharp.de-Mitglied

Dabei seit: 05.11.2018
Beiträge: 9


Quia_Respexit ist offline

Event-Daten aus await Task.Run(() => im UI anzeigen.

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich habe in der Vergangenheit bis jetzt über IProgress den Aufrufer informiert. Jetzt soll das Ganze auch über Events geschehen. Hier gesellt sich entsprechend das Problem mit dem Zugriff auf das UI, welches mir z.Z. Probleme bereitet. Ich bekomme es nicht hin, dass der Aufrufer die durch das Event überbrachten Daten anzeigen kann, da es sich halt um einen anderen Thread handelt und somit eine Exception geworfen wird. Unten findet sich ein 0815 Beispiel dazu. Wie könnte ich die Daten aus dem Event im Formular anzeigen, ohne die Exception zu werfen?

C#-Code:
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Test _Test;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _Test = new Test();
            _Test.Progress += (o, i) => { label1.Text = i.ToString(); };
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            await _Test.MyCalculation();
        }
    }

    public class Test
    {
        public event EventHandler<int> Progress;

        public async Task MyCalculation()
        {
            int c = 1000000;

            await Task.Run(() =>
            {
                for (int i = 0; i < c; i++)
                {
                    if (i % 7 == 0)
                    {
                        this.Progress?.Invoke(this, i);
                    }
                }
            });
        }
    }
}

Gruß
Neuer Beitrag 11.06.2019 11:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.252
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

s.  [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

PS: Control.Invoke ist eine andere Methode als event.Invoke (also nicht verwechseln).

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 11.06.2019 11:21.

Neuer Beitrag 11.06.2019 11:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.721
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Schau Dir Reactive Extensions an, das ist für solche Zwecke gemacht.
In wenigen Zeilen umsetzbar.

PS: die Logik stellt eine asynchrone Methode zur Verfügung, der dann via await aufgerufen werden kann.
Task.Run() als Aufruf ist in 99% der Fällen aus der UI nicht korrekt.

Aber das alles nimmt Dir ohnehin RX ab.
Neuer Beitrag 11.06.2019 11:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Quia_Respexit
myCSharp.de-Mitglied

Dabei seit: 05.11.2018
Beiträge: 9

Themenstarter Thema begonnen von Quia_Respexit

Quia_Respexit ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guten Morgen,


Danke für den Link und dem Hinweis von Reactive Extensions.

Gruß
Neuer Beitrag 13.06.2019 07:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.06.2019 10:33