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」にはどのくらい時間がかかりましたか?(これが同期している場合)

上記のラムダ式が非同期である場合、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 に答える