2016-09-26 3 views
2

2つのフォームを持つWinFormsアプリケーションがあります。最初のフォームで、ユーザーは何らかの情報を入力し、次のボタンをクリックします。これはform1を非表示にし、form2をロードし、データベースからデータをロードするタスク(その機能はフォーム1にあります)を起動します。タスクが完了したときのTextBox値の変更

私がしたいのは、タスクが実行されている間に "データの読み込み"とタスクが完了したときに返された行の数を表示するテキストボックスを第2のフォームに表示することです。すべての間、ユーザーはform2にデータを入力し続けることができます。

これは私がタスクとasyncを使用して試してみるのは初めてで、これを行う方法を理解するのには苦労しています。私の頭の中で

Task emailTask = new Task(() => FindCustomersForEmail(reg.Index)); 
emailTask.Start(); 

MessageControl formMessageControl = new MessageControl(); 
formMessageControl.Show(); 
this.Hide(); 

いただきましたようなものです:Task

while (emailTask not complete) 
{ 
    txtEmailCount.Text = "Loading"; 
} 
txtEmailCount.Text = customersToEmail.Rows.Count.ToString(); 

答えて

5

なぜだけではなくawait

// Note this is void because I'm assuming it's an event handler. 
// If it isn't this should be `async Task` instead. 
public async void FindCustomersAsync() 
{ 
    txtEmailCount.Text = "Loading"; 
    await Task.Run(() => FindCustomersForEmail(reg.Index)); 

    txtEmailCount.Text = customersToEmail.Rows.Count.ToString(); 
} 

サイドノート - Task.Runを使用しての代わりに、手動でTaskを開始することを好みます。

関連する問題