0
を待つ:非同期待つC#のロジックは、以下のWPF非同期私は非同期イベントをクリックし使用しようとしている
private async void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Thread.CurrentThread.ManagedThreadId + " click_begin");
await changeProgressBarAsync(ProgresBar_mainLoad);
MessageBox.Show(Thread.CurrentThread.ManagedThreadId + " click_end");
}
public Task changeProgressBarAsync(ProgressBar pb)
{
return Task.Factory.StartNew(() =>
{
MessageBox.Show(Thread.CurrentThread.ManagedThreadId + " task");
int count = 100;
while (count-- > 0)
{
pb.Dispatcher.Invoke(() =>
{
pb.Value += 1;
});
Thread.Sleep(10);
}
});
}
を、ライン
MessageBox.Show(Thread.CurrentThread.ManagedThreadId + " task");
と
MessageBox.Show(Thread.CurrentThread.ManagedThreadId + " click_end");
は等しい示す必要がありますスレッドID、 このプログラムは私を表示します
- 1 click_begin
- 1 click_end
が、なぜそれが起こるタスク?
それはそれはそれはTestClick2 あるタスク
static void Main(string[] args)
{
TestClick();
Console.ReadKey();
}
public static async void TestClick()
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " it is TestClick1");
await Worker();
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " it is TestClick2");
}
public static Task Worker()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " it is Task");
});
}
コンソールアプリで同じテストを行なったし、それは私に
- 1を表示
ありがとうございます! –