Geçerli kullanıcı arayüzünü (örneğin bir metin kutusu) iş parçacığımda işlenen bir değere güncellemek için geçmişte delegeler kullandım. async
ve await
'un sizin için bununla ilgilendiği varsayımı altındaydım.Neden Await sonra kod UI iş parçacığı üzerinde çalışmaz?
Düğmeye basıldığında, aşağıdaki kodu çalıştırdığımda 100 ms'de 100'e kadar çıkacak yeni bir görev başlatın. sayım UI üzerinde görüntülenen, ancak bunun yerine bir TargetInvocationException olsun edilmelidir:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
textBox1.Text = "Press button";
}
private async void button1_Click(object sender, EventArgs e)
{
await Task1();
}
private Task Task1()
{
return Task.Factory.StartNew(() => CountMethod());
}
private void CountMethod()
{
for (int i = 0; i < 100; i++)
{
Task.Delay(100).Wait();
//Console.WriteLine(i.ToString());
textBox1.Text = i.ToString();
}
}
}
'textBox1.Text = ...' kodu '' beklemeden '' değil. –