前回の年越しの瞬間、何してた?

アドバイスをお願いいたします。

やりたいこと:
(1)メインウィンドウで「計算始めるボタン」を押す。
(2)すると計算中には「実行中」の文字が別ウィンドウで立ち上がる。
(3)計算が終わると別ウィンドウが閉じる。

下記プログラムの不具合:
別ウィンドウで「実行中」の文字を出させたいが、文字部分が描画されない。

注意: 
下記プログラムはAthlon3000+で1秒ほどかかります。
CPUが遅いマシンで試す場合は「//計算処理」部分のfor重みを軽減させて実行して下さい。

using System;
using System.Drawing;
using System.Windows.Forms;

//メインウィンドウ
public class MainForm : Form {
private Button button;
private Label label;
public MainForm() {
button = new Button();
button.Text = "計算GO!!";
button.Click += new System.EventHandler(button_click);
label = new Label();
label.Location = new Point(50,50);
label.Text = "メインウィンドウ!";
Controls.Add(button);
Controls.Add(label);
Text = "MainForm";
BackColor = Color.Blue;
}

static void Main() {
Application.Run(new MainForm());
}

//計算GOボタンをクリックした時の処理
private void button_click(object sender, System.EventArgs e) {
double z;
SubForm Sub = new SubForm();

Sub.Show();

//計算処理
for(int i=0; i<=500000000; i++)
z = double.MaxValue * double.MinValue;

Sub.Close();

MessageBox.Show("計算終了");
}
}

//計算中を通知するウィンドウ
public class SubForm : Form {
private Label label;
public SubForm(){
label = new Label();
label.Text = "実行中!";
label.Location = new Point(50,50);
Text = "計算中通知ウィンドウ";
BackColor = Color.Red;
Controls.Add(label);
}
}

A 回答 (2件)

このような場合はマルチスレッドにするのが常套手段だと思います。



例えば、ボタン押した時にウインドウを作成表示し、計算スレッドを起動。計算スレッドの終了時にウインドウを閉じるのような動作にします。
逆に、Formの方を新規のスレッドにする手もありますが。

WIN32 API呼び出すより楽です。

[HOWTO] Visual C# .NET を使用してスレッドを作成する方法
http://support.microsoft.com/default.aspx?scid=k …

C#プログラミング入門 第7回:マルチスレッドプログラミング
http://www.stackasterisk.jp/tech/dotNet/csharp07 …

参考URL:http://www.stackasterisk.jp/tech/dotNet/csharp07 …
    • good
    • 0
この回答へのお礼

マルチスレッドにして解決できました。

回答どうもありがとうございました。

お礼日時:2005/08/24 01:23
    • good
    • 0
この回答へのお礼

回答どうもありがとうございました。
大変参考になりました。

ただ、お手軽に「Application.DoEvents();」を上記プログラムのfor文中に入れたらとんでもなく処理時間がかかるようになってしまいました。
バックグランドで重い処理をしていなくても遅いです。
ループ回数の多いプログラムには向かないかもしれません。

Win32 APIを使ったプログラムの紹介もあったのですが、当方知識ではちょっと勉強が必要で、まだ試していません。

でも大変参考になり、回答感謝しています。

お礼日時:2005/08/15 10:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報