0

Enabled如果我在属性窗口中将其属性设置为 true,那么我在表单中使用了一个 Windows.Forms.Timer ,这是它唯一有效的时间。如果我将其禁用,则仅在需要时启用它,它不会打勾。

        private void btnRename_Click(object sender, EventArgs e)
        {
            timerUpdateProgress.Enabled = true;
            timerUpdateProgress.Start();
            pbProgress.Maximum = clbFiles.CheckedItems.Count;
            var renameTask = Task.Factory.StartNew(() => doRename(true, tbCurrentDirectory.Text, clbFiles.CheckedItems, rules));
            if(renameTask.Result.Count > 0)
            {
                timerUpdateProgress.Enabled = false;
                new ExceptionsWindow(renameTask.Result).ShowDialog();
            }
            timerUpdateProgress.Enabled = false;
            loadFiles(tbCurrentDirectory.Text);
        }

        private void timerUpdateProgress_Tick(object sender, EventArgs e)
        {
            pbProgress.Value = progress; //I have a breakpoint on this line
        }

我要做的就是用进度条显示操作的进度。启用和启动计时器什么都不做,滴答声永远不会发生。为什么会这样?

更新:在启用和启动计时器后添加 2000 毫秒的睡眠后单步执行代码显示它仍然没有滴答(我在滴答处理程序中有一个断点)。

更多说明:在属性窗口中启用计时器时,始终调用刻度处理程序,而无需调用Start(). 只需启用计时器,我的断点就会一直触发。我还应该注意我使用的是 .NET 4。

4

2 回答 2

0

“Task.Factory.StartNew”花了多长时间?(如果这是同步的)

如果上面的 lambda 表达式是异步的,我看看 renameTask.Result.Count 是否大于 0,progress bar = false ...

于 2013-02-04T06:58:24.633 回答
0

编辑: 从评论中得到一个想法后 - 似乎你根本不需要计时器

Value您可以在更新的值时更新进度条progress

这样,从 0 到 100% 的过渡也可能看起来更顺畅。


据我说,您需要禁用计时器。

只需使用

timer.Stop();

然后timer.Start()在需要时再次。

此外,如果您禁用了计时器进度,那么您还必须这样做

timerUpdateProgress.Enabled = true
于 2013-02-04T07:09:17.627 回答