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.). ;)
|