Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ProgressBar重置为60%_C#_Progress Bar - Fatal编程技术网

C# ProgressBar重置为60%

C# ProgressBar重置为60%,c#,progress-bar,C#,Progress Bar,我有以下代码: for(int k = 0; k<11; k++) { pBar.Maximum = 10; pBar.Value = k; if (pBar.Maximum == k) pBar.Value = 0; } for(int k=0;k 您的问题是您正在使用循环。您需要使用计时器,以便程序有时间执行检查/分配和更新屏幕 代码使用调用循环体的计时器替换for循环。由于计时器没有索引变量,因此它在计时器(计数)之外初始化,并随每个刻度更新

我有以下代码:

for(int k = 0; k<11; k++)
{
    pBar.Maximum = 10;
    pBar.Value = k;
    if (pBar.Maximum == k)
        pBar.Value = 0;
}
for(int k=0;k
您的问题是您正在使用循环。您需要使用计时器,以便程序有时间执行检查/分配和更新屏幕


代码使用调用循环体的计时器替换for循环。由于计时器没有索引变量,因此它在计时器(计数)之外初始化,并随每个刻度更新。

首先:没有任何理由在每个间隔上分配
pBar.Maximum
。 只要做:

pBar.Maximum = 10;
for(int k = 0; k<11; k++)
{
   pBar.Value = k;
   if (pBar.Maximum == k)
      pBar.Value = 0;
}
pBar.max=10;

对于(int k=0;k如果切换到经典模式,此故障将消失。在重置之前,进度条将显示为完全绘制

这是因为在经典模式下,绘制操作是同步的,并且在<代码>值设定器返回之前完成,但在主题模式下,增加值时会播放某种动画,这需要一些时间来播放

相反,如果减小该值,则不会出现动画;进度条会立即收缩


这就是为什么它看起来只有大约60%的满:在进度条有时间绘制最后几个增量的动画之前,您减少了该值(立即完成)。

我终于找到了这个问题的解决方案,并就此进行了撰写。这个想法来源于这个问题

     progressBar1.Value = e.ProgressPercentage;
     if (e.ProgressPercentage != 0)
         progressBar1.Value = e.ProgressPercentage - 1;
     progressBar1.Value = e.ProgressPercentage;
     if (progressBar1.Maximum == e.ProgressPercentage)
         progressBar1.Value = 0;

有了这些代码,如果它是可见的,我会感到惊讶,因为你似乎没有让消息泵运行,并呈现任何更改。你在该循环中到底在做什么?我猜它实际上不是这样的?不幸的是,在一个主题化的界面(Windows XP主题及以上)中,这种情况经常发生。如果切换到经典模式,进度条将显示为完全填满。我不知道为什么会出现这种情况,但我也会遇到这种情况。@Groo,我正在根据列表添加一个sql行。我以前在foreach循环中有一个sql行,但它没有当前的索引值。@GSerg,这不会发生在我身上。它确实显示1或更高。我怀疑OP really在循环中完全不做任何事情。这会起作用,但我不会说使用计时器更新进度条是很常见的。因此,使用它,我如何从原始ForEach循环中添加代码,并在每次间隔后更新进度条?@CCInc用我提供的代码替换上面的代码。如果您有任何需要,请I’我想在循环中,使用count作为索引变量,将其写入Tick方法中。好的,这是可行的,但是我使用的是Sqlite数据库,每当我访问Tick内部的Sqlite连接时,连接状态是关闭的,而在Tick外部,连接状态是打开的。这是为什么?@CCInc这可能是因为计时器被调用了与连接不同的线程,这意味着在调用计时器时,连接已经关闭-您是否可以在计时器内部打开SqliteConnection?另外,关闭连接的代码在哪里?也许您可以将其移动到计时器中。
     progressBar1.Value = e.ProgressPercentage;
     if (e.ProgressPercentage != 0)
         progressBar1.Value = e.ProgressPercentage - 1;
     progressBar1.Value = e.ProgressPercentage;
     if (progressBar1.Maximum == e.ProgressPercentage)
         progressBar1.Value = 0;