gpt4 book ai didi

c# - progressBar独立线程

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:29 26 4
gpt4 key购买 nike

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

我有这个主线程

<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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com