Thema Datum  Von Nutzer Rating
Antwort
02.12.2022 14:09:08 Gast12887
NotSolved
03.12.2022 21:13:23 Gast81718
NotSolved
03.12.2022 21:20:25 Gast12887
NotSolved
15.12.2022 14:08:04 Gast93824
***
NotSolved
15.12.2022 14:27:03 Gast12887
NotSolved
Blau async/await => Button
15.12.2022 15:44:33 Gast12355
Solved
15.12.2022 16:11:15 Gast12887
NotSolved
15.12.2022 22:55:28 Gast35692
NotSolved
16.12.2022 06:29:42 Gast12887
NotSolved
16.12.2022 14:04:18 Gast99370
NotSolved

Ansicht des Beitrags:
Von:
Gast12355
Datum:
15.12.2022 15:44:33
Views:
272
Rating: Antwort:
 Nein
Thema:
async/await => Button

muss ich in dem Fall die Methodensignatur ändern?

Bin mir nicht sicher was du meinst, deshalb noch mal vollständig. Änderun musst du nur das gezeigte...

#region Async
        private async void cmdProgrammLaden_Click(object sender, EventArgs e)
        {
            Console.WriteLine("Button-Thread-ID: " + Thread.CurrentThread.ManagedThreadId);
            this.txtSendData.Text = await Task.Run(DncProgrammLadenAsync);
        }
 
        async Task<string> DncProgrammLadenAsync()
        {
            string path     = String.Empty;
            string content  = String.Empty;
             
            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.InitialDirectory = @"c:\Test\";
                openFileDialog.Filter = "Textdateien (*.txt)|*.txt";
                openFileDialog.FilterIndex = 2;
                openFileDialog.RestoreDirectory = true;
 
                if (openFileDialog.ShowDialog()==DialogResult.OK)
                {
                    path = openFileDialog.FileName;
                    var filestream = openFileDialog.OpenFile();
 
                    using (StreamReader reader = new StreamReader(filestream))
                    {
                        Console.WriteLine("Task-Thread-ID: "+Thread.CurrentThread.ManagedThreadId);
                        content = await reader.ReadToEndAsync().ConfigureAwait(false);
                        //Thread.Sleep(3000);
                    }   
                }
                        return content;
                         
            }
 
        }
        #endregion Async

Zur Erklärung.

private async void cmdProgrammLaden_Click(object sender, EventArgs e)
{            
  Console.WriteLine("Button-Thread-ID: " + Thread.CurrentThread.ManagedThreadId);
  this.txtSendData.Text = await DncProgrammLadenAsync();
}

Alles was im Body dieser Methode steht, läuft im Kontext des UI Threads. Das abrufen der Daten findet hier also immer noch innerhalb des UI Thread statt - zwar asynchron, aber immer noch im selben Thread.

Jetzt möchtest du aber gerade, dass das Abrufen der Daten nicht im UI Thread läuft, deshalb Task.Run() wie oben gezeigt.


Ursprünglich war es so, je nachdem wie intensiv das Lesen der Daten war, dass der Thread blockieren konnte, aber nicht muss. War er zu intensiv, hat sich das auf den UI Thread ausgewirkt (Anzeige wird langsamer oder friert sogar kurzzeitig ein). Dein Problem also nachstellen zu können, wäre gar nicht so trivial, da hier unterschiedliche Faktoren mit hinein spielen (lokaler Speicher, oder nicht; SSD oder nicht, usw.). ;)

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
02.12.2022 14:09:08 Gast12887
NotSolved
03.12.2022 21:13:23 Gast81718
NotSolved
03.12.2022 21:20:25 Gast12887
NotSolved
15.12.2022 14:08:04 Gast93824
***
NotSolved
15.12.2022 14:27:03 Gast12887
NotSolved
Blau async/await => Button
15.12.2022 15:44:33 Gast12355
Solved
15.12.2022 16:11:15 Gast12887
NotSolved
15.12.2022 22:55:28 Gast35692
NotSolved
16.12.2022 06:29:42 Gast12887
NotSolved
16.12.2022 14:04:18 Gast99370
NotSolved