我的UI上有一个按钮和一个标签。当我点击按钮时我想在标签上显示“正在进行”,直到完成for循环,然后同一标签应该再显示该集合的结果。
private void button1_Click(object sender, RoutedEventArgs e)
{
label1.Content = "In progress..";
List<string> intList = new List<string>();
for (long i = 0; i <= 50000000; i++)
{
intList.Add("Test");
}
label1.Content = intList.ToString();
}
答案 0 :(得分:2)
你需要farm the work out to a background thread,否则你的循环会在UI线程上继续,因此你看不到“进展”。
您可以使用BackgroundWorker或Task来完成此操作:
private void button1_Click(object sender, RoutedEventArgs e)
{
label1.Content = "In progress..";
Task.Factory.StartNew<List<string>>(
() =>
{
List<string> intList = new List<string>();
for (long i = 0; i <= 50000000; i++)
{
intList.Add("Test");
}
return intList;
})
.ContinueWith(
(t) => label1.Content = t.Result.ToString(),
TaskScheduler.FromCurrentSynchronizationContext());
}
答案 1 :(得分:0)
使用background worker进行实际工作(for循环)并订阅他的功能完成时引发的事件。您还可以检查进度等,以获得更有价值的进度表。
答案 2 :(得分:0)
您应该使用BackgroundWorker执行此操作。这里似乎是如何做到这一点的好例子。 http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/