
アドバイスをお願いいたします。
やりたいこと:
(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);
}
}
No.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 …
No.1
- 回答日時:
回答どうもありがとうございました。
大変参考になりました。
ただ、お手軽に「Application.DoEvents();」を上記プログラムのfor文中に入れたらとんでもなく処理時間がかかるようになってしまいました。
バックグランドで重い処理をしていなくても遅いです。
ループ回数の多いプログラムには向かないかもしれません。
Win32 APIを使ったプログラムの紹介もあったのですが、当方知識ではちょっと勉強が必要で、まだ試していません。
でも大変参考になり、回答感謝しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
切り上げたい
-
VBAで関数をつくる
-
VBAでのNOW関数の計算
-
ド・モルガンの法則について(プ...
-
移動平均を計算するプログラム
-
C言語についての質問です。 ル...
-
計算式の文字列を解析して自分...
-
R言語での極小値の指数形式での...
-
関数を使わないで日付の計算を...
-
三菱シーケンサー works2 の日...
-
EXCELなどで「返す」という表現
-
排他的論理和 BCC(水平パリテ...
-
C言語初心者。静磁場の計算。台...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
アセンブリ言語で0x4(%esp)の...
-
C言語 Σをつかったプログラム
-
VBAの再計算が反映されない件に...
-
チェックデジット計算できる関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
エクセルで特定のセルのみを任...
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
バッチファイルでウインドウを...
-
Visual C++でdebugとreleaseで...
-
y=(x^2 +3x+1)^4を微分の定義を...
-
入射角反射角
-
スレッド処理からダイアログを...
-
60進数の四則計算
-
Javaと他言語比較について
-
VBAで関数をつくる
-
C言語 Σをつかったプログラム
-
CRC8を教えてください
-
C言語についてです。 再帰を使...
-
C言語について 下の画像は do-w...
おすすめ情報