C# 进度条卡在c上#

C# 进度条卡在c上#,c#,winforms,progress-bar,C#,Winforms,Progress Bar,我想在我的表单中创建进度条,但是当我运行它时,进度条卡住了,并且没有移动到最后,它甚至不到一半就停止了 有解决办法吗 多谢各位 代码如下: private void WelcomeScreen_Load(object sender, EventArgs e) { progressBar1.Minimum = 0; progressBar1.Maximum = 100; progressBar1.Step =

我想在我的表单中创建进度条,但是当我运行它时,进度条卡住了,并且没有移动到最后,它甚至不到一半就停止了

有解决办法吗

多谢各位

代码如下:

private void WelcomeScreen_Load(object sender, EventArgs e)
        {
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;
            progressBar1.Step = 5;
            progressBar1.PerformStep();
        }

它被卡住了,因为您没有更改它的值。要使其取消锁定,请更改其值。

进度条被卡住,因为您只调用了一次
PerformStep
。调用
PerformStep
时,进度条的值将增加5(因为您将其设置为5)

为了使进度条移动更多,您必须更频繁地调用
PerformStep

例如,如果您有一个在后台工作的后台工作线程,您希望通知用户该工作需要多长时间。每次您想显示已取得进展时,都可以调用
PerformStep

示例代码:

...
progressBar1.Step = 5;

InitTheWork();

progressBar1.PerformStep(); //This increments the pb's value by 5, since property `Step` has been set to 5

DoSomeHeavyWork();

progressBar1.Value += 20; //This increments pb's value by 20

FinalizeWork();

progressBar1.Value = 100; //This fully fills up the progress bar, to signify that the work has been completed.
进度条不会自行“移动”。每次需要更改PerformStep()时,都必须调用它。对于当前代码,调用PerformStep()20次应该会使它看起来完成了。您必须自己找出在资源密集型流程中的哪些点更新progressbar是明智的。它可能看起来像这样:

PerformTask1();
progressBar1.PerformStep();
PerformTask2();
progressBar1.PerformStep();
PerformTask3();
progressBar1.PerformStep();
...

如果处理用户输入和GUI更新的线程与调用Welcome_Screen_Load的线程相同,则可能需要在另一个线程中显示progressbar,而不是在另一个线程中显示progressbar,以免加载屏幕出现无响应。

您需要运行PerformStep()在后台线程中。上面的代码可以工作,但它只执行一次,因此从0-100的可能范围内递增5。但它确实会移动,确切的行为是什么,请尽可能地描述它。编辑:@Garry Vass,为什么他不能从当前线程更改进度条的值?他正在执行一个以前定义为5的步骤,因此代码相当于:progressBar.value+=5;这几乎不是一个答案。至少指出问题所在以及解决方法。就目前而言,最好是作为一个评论