C# 正在努力更新ProgressBar(无线程)

C# 正在努力更新ProgressBar(无线程),c#,winforms,unresponsive-progressbar,C#,Winforms,Unresponsive Progressbar,我有一个程序(winform),它在一个文件夹中运行了很多文件(有时在400区域内),为了显示它的进度,我使用了一个进度条。如果有区别,信息会发布到列表视图中。我遇到的问题是,当电脑运行缓慢时,我会通过网络处理文件夹,或者如果文件量很大,ProgressBar就会停止更新。如果n离开程序,它将继续并完成,但进度条会在某个阶段卡住。然后只显示它是完整的(补充说明:我注意到它不仅仅是进度条。有时它是整个表单。但同样,当程序完成时,它是好的。当它工作时,你可以移动表单,只是不与它交互) 现在这里是它变

我有一个程序(winform),它在一个文件夹中运行了很多文件(有时在400区域内),为了显示它的进度,我使用了一个进度条。如果有区别,信息会发布到列表视图中。我遇到的问题是,当电脑运行缓慢时,我会通过网络处理文件夹,或者如果文件量很大,ProgressBar就会停止更新。如果n离开程序,它将继续并完成,但进度条会在某个阶段卡住。然后只显示它是完整的(补充说明:我注意到它不仅仅是进度条。有时它是整个表单。但同样,当程序完成时,它是好的。当它工作时,你可以移动表单,只是不与它交互)

现在这里是它变得棘手的地方。我知道它可以通过使用线程来解决。然而,有人告诉我不要使用它(让我们不要讨论为什么,让我们排除它,不管它是否愚蠢)。我还尝试刷新表单,并刷新栏本身。这些似乎都不管用。使用它不是一个好主意,但即使尝试过,它也不起作用

如何更新进度条?有什么想法吗

下面是我用于进度条的一些代码

//before the loop
progress = iCount1;
progressvalue = 0;
double increment = 100 / (double)progress;
//this is at the end of the loop
progressvalue = progressvalue + increment;
然后是一些代码。其中一些方法可以阻止值超出范围。其余部分与进度条完全无关

编辑:o,我有1个变量。它基本上运行3个循环。所以我们有一个连续的酒吧。不是酒吧开了三次

编辑:对于我的电脑上的文件夹,它似乎可以正常工作。但当它在速度较慢的电脑上或通过网络运行时,就是这样

编辑:我得到了关于backgroundworker和线程的答案。那么,没有线程就没有办法做到这一点吗


更新:我终于说服了我的老板与backgroundworker合作。所以我会在那做的。但是对于这个问题,我想.DoEvent的答案是最好的

当表单线程繁忙时,它将非常无响应,并且根本不绘制表单。即使你不想要,我想你也应该重新考虑


在本例中,我将使用backgroundworker:这是一个非常简单的设置。

您可以添加一个应用程序。DoEvents()

例如:

while(!end)
{ 

            //You processing logic here
            Application.DoEvents();
}
请注意,通常不鼓励这种做法,因为它会破坏正常的事件流,并可能产生不可预测的结果


http://www.codinghorror.com/blog/2005/08/is-doevents-evil-revisited.html

此代码只执行一些基本计算。我看不到您试图更新
ProgressBar1.Value
.o的位置。对不起,这就在我粘贴的部分下方。基本上是这样的:ProgressBar1.Value=System.Convert.ToInt32(progressvalue);我想。但我的老板拒绝了。我仍在努力说服他,但在此之前,我需要尝试找到另一种方法。它也适用于较小的文件夹。甚至是我电脑上的大文件夹(比如400个)(虽然没那么好,但至少还不错)。主要是当我尝试通过网络做事时