我在按钮单击事件中进行了很长的计算,并且在每次迭代之后,我希望更新进度条。我想知道是否有任何方法可以在不使用后台线程的情况下执行此操作:
private void btnGetData_Click(object sender, RoutedEventArgs e)
{
progressBarGetData.Minimum = 0;
progressBarGetData.Maximum = recordCount;
progressBarGetData.Value = 0;
while(long iteration going on)
{
//do work
progressBarGetData.Value += 1;
}
}//end button click
屏幕上的进度条不会缓慢增加。我必须使用后台 worker 吗?
谢谢。
最佳答案
主要问题不是进度条,而是您正在 UI 线程中执行长时间运行的同步操作。这将卡住整个 UI,从而带来糟糕的用户体验。
如果您可以将循环转换为使用异步调用(例如,如果它只是长时间运行,因为它正在与 Web 服务或数据库通信),那么这是一种选择 - 而且会变得更加容易在 .NET 4.5 中。
否则,您将需要一个单独的线程 - 显式启动或使用 BackgroundWorker
.
关于c# - 有没有办法在不使用后台线程的情况下更新进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941510/