フォームのマルチスレッドで
- 題名: フォームのマルチスレッドで
- 著者: いわっち
- 日時: 2004/07/05 13:14:18
- ID: 4707
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: フォームのマルチスレッドで
- 著者: ゆ
- 日時: 2004/07/05 13:52:23
- ID: 4709
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: フォームのマルチスレッドで
- 著者: てすてす
- 日時: 2004/07/05 13:54:40
- ID: 4710
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: フォームのマルチスレッドで
- 著者: いわっち
- 日時: 2004/07/05 15:30:16
- ID: 4712
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: フォームのマルチスレッドで
- 著者: いわっち
- 日時: 2004/07/05 15:56:13
- ID: 4713
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: フォームのマルチスレッドで
- 著者: いわっち
- 日時: 2004/07/05 16:22:38
- ID: 4714
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
C#でEXCEL帳票を作成するクラスを作成し、その中で処理中を表示するフォームをスレッドで実装しました。
フォーム内でTimerクラスを使用し、処理中をブリンクさせるようにしているのですが、タイマーイベントでApplication.DoEvents();を記述すると、XPだとWIN32エラーとなります。
2000だと問題なく正常終了します。
タイマーイベント内でApplication.DoEvents();をコメントにすれば、エラーにはなりません。
何が悪いのでしょうか。
[** 帳票クラス **]
//スレッドオブジェクトを生成します
Thread dialogThread = new Thread(new ThreadStart(DialogThreadStart));
//スレッドを開始します
dialogThread.Start();
private void DialogThreadStart()
{
//処理中画面(frmShoriCh.cs)をNewします
this._runDialog = new frmShoriCh();
//処理中画面を表示します
this._runDialog.ShowDialog();
}
private void DialogThreadEnd()
{
if (this._runDialog!=null)
{
//フォームを閉じます
this._runDialog.Close(); → この処理が終わったあとにWIN32エラーとなる。
}
[** フォームクラス **]
private void _timer_Tick(object sender, EventArgs e)
{
//処理中メッセージの反転
label1.Visible = !label1.Visible;
label2.Visible = !label2.Visible;
Application.DoEvents(); → コメントにするとエラーにならない。
}