アドバイスをお願いいたします。
やりたいこと:
(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で質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
-
4
「キャンセル」ボタン付きの処理中ダイアログ
C言語・C++・C#
-
5
フォームの再読み込み
Visual Basic(VBA)
-
6
C# 配列の変数宣言について。
C言語・C++・C#
-
7
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
8
C#で、ある条件でFormが自動で閉じるプログラム
C言語・C++・C#
-
9
C#で処理中画面を表示したい。
その他(プログラミング・Web制作)
-
10
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
11
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
12
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
13
【C#】別フォームも同時に閉じるには?
C言語・C++・C#
-
14
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
15
C# ログイン画面からメイン画面への画面遷移について
C言語・C++・C#
-
16
【C#】DataGridViewの最大列数について
システム
-
17
メッセージボックスで1025文字以上を扱う
Visual Basic(VBA)
-
18
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
19
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
20
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数値計算の高速化 (cos, sin, exp)
-
Perlでのルートの計算
-
Vb6.0で三角関数が使えない
-
VBAの再計算が反映されない件に...
-
Visual C++でdebugとreleaseで...
-
[急募]Pythonについてです。
-
R言語での極小値の指数形式での...
-
スライムがつぶれていく様子を...
-
60進数の四則計算
-
VB6.0でのバイナリデータの扱い...
-
傾いた四角形内の範囲の条件式
-
EXCELなどで「返す」という表現
-
VB6で正確なミリ秒を計測したい...
-
CとFORTRANの計算速度はどちら...
-
Excel VBAの残業時間の合計計算...
-
VBでReplace
-
10進数から8進数へ
-
順列のプログラムについて(VB)
-
Javascrptの0の掛け算
-
エクセルで特定のセルのみを任...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語の課題で、1年の秒数を計...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
なぜオーバーフローになるので...
-
数値計算の高速化 (cos, sin, exp)
-
モジュラス103の計算とは何でし...
-
C# 計算処理中に実行中ウィン...
-
モジュロ
-
引き放し法による除算アルゴリ...
-
60進数の四則計算
-
C言語についてです。 再帰を使...
-
Perlで時間の計算
-
CRC8を教えてください
-
傾いた四角形内の範囲の条件式
おすすめ情報