ヒヒは、必要に応じて背景やUIスレッド上のコードの実行を簡素化し、あなたがネット4を使用しているか、上記Taskクラス
Taskクラスを使用することができれば行くための一つの方法は、別の方法でバックグラウンドワーカーアプローチで言ったように。あなたは
リードCopsey、Jr.のはネット上の並列処理に非常に良いseriesを持っているタスクContinuationを使用して設定したイベントとコールバックの余分なコードを書く避けるTaskクラスをすることができます使用すると、例えば、aのそれ
を見てみましょう同期的なやり方は可能です
//bad way to send emails to all people in list, that will freeze your UI
foreach (String to in toList)
{
bool hasSent = SendMail(from, "password", to, SubjectTextBox.Text, BodyTextBox.Text);
if (hasSent)
{
OutPutTextBox.appendText("Sent to: " + to);
}
else
{
OutPutTextBox.appendText("Failed to: " + to);
}
}
//good way using Task class which won't freeze your UI
string subject = SubjectTextBox.Text;
string body = BodyTextBox.Text;
var ui = TaskScheduler.FromCurrentSynchronizationContext();
List<Task> mails = new List<Task>();
foreach (string to in toList)
{
string target = to;
var t = Task.Factory.StartNew(() => SendMail(from, "password", target, subject, body))
.ContinueWith(task =>
{
if (task.Result)
{
OutPutTextBox.appendText("Sent to: " + to);
}
else
{
OutPutTextBox.appendText("Failed to: " + to);
}
}, ui);
}
ありがとうございます。解決策は非常に役に立ちます – RSP