Như con khỉ đầu chó cho biết một con đường để đi là cách tiếp cận nhân viên Bối cảnh một cách khác nếu bạn đang sử dụng Net 4 hoặc cao hơn có thể được sử dụng Task lớp
nhiệm lớp đơn giản hoá việc thực hiện các mã trên nền và giao diện người dùng chủ đề khi cần thiết . Sử dụng lớp công tác, bạn có thể tránh phải viết thêm mã thiết sự kiện và callbacks bằng cách sử dụng công tác Continuation
Reed Copsey, Jr. có series rất tốt trên Parallelism trên Net cũng có một cái nhìn vào nó
ví dụ một cách làm việc đồng bộ có thể là
//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);
}
Nguồn
2011-10-25 11:53:42
Cảm ơn rất nhiều. Giải pháp rất hữu ích – RSP