□投稿者/ 魔界の仮面弁士 (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() という逃げ方もあるけれど、こちらは個人的には非推奨。
|
|