c# - progressBar独立线程

标签 c# progress-bar

我对进度条显示值有疑问。

我有这个主线程

<p></p>

<p>private void button1_Click(object sender, EventArgs e) 
{ 
progress prog = new progress(); 
progress.progressEvent += new progress.progressEventHandler(progressEvent); 
for(int i=0;i<100;i++) 
{ 
Thread.Sleep(100); 
prog.incA(); 
} 
} </p>

<p>void progressEvent(object sender) 
{ 
if (progressBar1.InvokeRequired) 
{ 
//Tady mi to caka az kym nedobehne cyklus for a pak zacne tohleto fungovat 
progressBar1.Invoke(new ChangeProgressBarValue(ProgressStep)); 
} 
else 
{ 
ProgressStep(); 
} 
} </p>

<p>public void ProgressStep() 
{ 
progressBar1.PerformStep(); 
} </p>

<p>public class progress 
{ 
private ThreadStart ts; 
private Thread th; 
private bool status = true; 
public delegate void progressEventHandler(object sender); 
public static event progressEventHandler progressEvent; 
private int b,a = 0; </p>

<p>public progress() 
{ 
ts=new ThreadStart(go); 
th = new Thread(ts); 
th.IsBackground = true; 
th.Start(); 
} </p>

<p>public void incA() 
{ 
a++; 
if(a==100) 
status = false; 
} </p>

<p>private void go() 
{ 
while (status) 
{ 
if (a != b) 
{ 
b = a; 
if (progressEvent != null) 
progressEvent(this); 
} 
} 
th.Abort(); 
} 
} 
</p>

我的问题是如果启动主线程并调用 IncA 这个方法调用事件并且在事件中调用进度条 并且这个调用等待结束主线程 FOR

为什么要等? 谢谢

最佳答案

您在主线程中的循环阻止了“绘制”事件的发生。由于您是从该线程调用进度条的函数,因此您永远不会看到更新。

您需要将代码移动到另一个线程来完成递增。

下面是您想要使用 ButtonBackgroundWorkerProgressBar 执行的操作的示例:

private void button1_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    for (int i = 1; i <= 100; i++)
    {
        backgroundWorker1.ReportProgress(i);
        Thread.Sleep(100);
    }
}

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
    this.progressBar1.Value = e.ProgressPercentage;
}

希望这对您有所帮助!

关于c# - progressBar独立线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168192/

相关文章:

c# - VS 2015 复制以输出项目引用的 GAC 引用,而不考虑复制本地设置

c# - Visual Studio 中的文件资源管理器工具?

python - 阻塞 Tkinter 接口(interface),直到线程完成其任务

python - tqdm progressbar 和 zip 内置不能一起工作

c# - 使用 ASP.NET MVC 5 和 DocumentDB 执行登录操作

c# - 使用C#,当MySql Server上发生数据库更改时触发事件

c# - Java解密返回的某些 block 有错误

javascript - 错误: Cannot find module '/node_modules\progressbar/package.json'

progress-bar - 带有剩余执行时间 sas 的进度条

jquery - 如何添加jquery进度条的颜色变化