Các câu hỏi mới về người mới:Tại sao mã Parallel.ForEach này đóng băng chương trình?
Mã này lấy một số proxy từ danh sách trong cửa sổ chính (tôi không thể tìm ra cách làm cho các biến có sẵn giữa các chức năng khác nhau) và kiểm tra từng biến httpwebrequest) và sau đó thêm chúng vào một danh sách gọi là finishedProxies.
Vì một lý do nào đó khi tôi nhấn nút bắt đầu, toàn bộ chương trình sẽ bị treo. Tôi đã theo ấn tượng rằng Parallel tạo ra các luồng riêng biệt cho mỗi hành động rời khỏi thread UI một mình sao cho nó đáp ứng?
private void start_Click(object sender, RoutedEventArgs e)
{
// Populate a list of proxies
List<string> proxies = new List<string>();
List<string> finishedProxies = new List<string>();
foreach (string proxy in proxiesList.Items)
{
proxies.Add(proxy);
}
Parallel.ForEach<string>(proxies, (i) =>
{
string checkResult;
checkResult = checkProxy(i);
finishedProxies.Add(checkResult);
// update ui
/*
status.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
status.Content = "hello" + checkResult;
}
)); */
// update ui finished
//Console.WriteLine("[{0}] F({1}) = {2}", Thread.CurrentThread.Name, i, CalculateFibonacciNumber(i));
});
}
Tôi đã thử sử dụng mã được nhận xét để thực hiện thay đổi đối với giao diện người dùng bên trong Parallel.Foreach và làm cho chương trình bị đóng băng sau khi nút bắt đầu được nhấn. Nó đã làm việc cho tôi trước đây nhưng tôi đã sử dụng lớp Thread.
Làm cách nào để cập nhật giao diện người dùng từ bên trong Parallel.Foreach và làm cách nào để thực hiện công việc Parallel.Foreach để nó không làm cho giao diện người dùng bị đóng băng khi đang hoạt động?
Bạn đang pummelling thread UI với yêu cầu gọi, nó không nhận được xung quanh để làm nhiệm vụ thường xuyên của nó nữa. Giống như sơn lại giao diện người dùng. Ít nhất thấp hơn mức ưu tiên cho Nền. –
@ dsp_099б ý của bạn là gì dưới "Nó đã làm việc cho tôi trước đây nhưng tôi đã sử dụng lớp Thread"? – Fulproof