C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 36 を表示中)
■18107 / )  Re[3]: 再 時間計測
□投稿者/ 魔界の仮面弁士 (721回)-(2008/05/08(Thu) 19:56:45)
No18102 (tanaka さん) に返信
>>>private Stopwatch stopWatchElapsed;
>>>private void FrmMain_Load(object sender, EventArgs e)
>>>{
>>>    stopWatchProcessing = new Stopwatch();
>>>}
>>ここで使われている変数は、それぞれ別の変数を意味しますが、その点は大丈夫ですよね?
> すいません。記載ミスです。
> private Stopwatch stopWatchProcessing;

ボタンの Click で使われているのは、stopWatchElapsed の方ですよね。
ボタン側も記載ミスで、実際には stopWatchProcessing だけ、ということでしょうか?


てっきり、時間経過測定用の stopWatchElapsed と、
「処理」の部分で使われる、stopWatchProcessing の
2 つの Stopwatch があるのかと思ったのですが。


>>> private void btnExec_Click(object sender, EventArgs e)
>>> {
>>>     tmrStopWatch.Enabled = true;
>>>     stopWatchElapsed.Start();
>>>     // 処理
>>>     stopWatchElapsed.Stop();
>>> }

で、ここが原因かと思います。

最後の Stop を取り除くと、(「処理」の最中ではなく)Click イベントが終了した後で
タイマーが稼働し始めるのでは無いでしょうか。

恐らく、「処理」の最中にイベントが発生する事を期待しているのだと思いますが、
この場合、「処理」中にメッセージが処理されないので、Timer が稼働する余裕がありません。

「処理」部を BackgroundWorker の DoWork イベント内に移動し、
非同期で処理させることを検討してください。

# この他に、Application.DoEvents() という逃げ方もあるけれど、こちらは個人的には非推奨。

返信 編集キー/


管理者用

- Child Tree -