我的进度条有问题,我想像以下代码一样运行两个进度条:
namespace probando
{
public partial class MainWindow : Window
{
int sec = 0;
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
string stringSec = sec.ToString();
for (int i = 0; i <= sec; i++)
{
masuno(i,sec);
}
}
private void Tiempo_segundos_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
sec = (int) Tiempo_segundos.Value;
}
private void masuno(int i, int sec)
{
Porcentaje_restante.Maximum = sec;
Porcentaje_restante.Dispatcher.Invoke(() => Porcentaje_restante.Value = i, DispatcherPriority.Background);
Thread.Sleep(1000);
}
}
}
我有另一个进度条,当第一个条形图正在工作时,不确定的购买不起作用。
感谢您的帮助。
答案 0 :(得分:1)
Thread.Sleep暂停当前线程。
从您的代码中我假设您在Windows窗体或wpf应用程序中使用它,对吧?
现在只有一个ui线程。现在,当你在ui线程中睡觉时,整个ui暂停了。所以你必须在后台线程中放入不是ui的工作代码。
请看这个问题: How to update the GUI from another thread in C#?或How to update UI from another thread running in another class
以及关于线程模型的MSDN Article
答案 1 :(得分:0)
如果Sleep
用于延迟UI线程中的某些内容(模拟工作,拆分某些内容,等等),那么您可以使用async/await
来正确执行此操作(Sleep
正在阻止UI线程):
async void masuno(int i, int sec)
{
...
// Thread.Sleep(1000); - instead of this do:
await Task.Delay(1000);
}
答案 2 :(得分:0)
查看专为此类场景设计的BackgroundWorker。它在后台线程上运行您的长进程,并允许您在进度更改时执行UI更新。