C# を使用した開発をしています。
開発環境は、Microsoft Visual Studio Express 2017 for Windows Desktopです。
親フォーム(Form1)から子フォーム(Form2)を表示させ、
10秒程度要する負荷のかかる処理を親フォームで実行します。
その間、子フォーム(Form2)に配置したボタンがクリックできなくなります。
ボタンをクリックできるようにするためには、どのようにすればよいでしょうか。
再現できるコードを以下に記載します。
C#
1 public partial class Form1 : Form 2 { 3 Form2 f = null; 4 5 public Form1() 6 { 7 InitializeComponent(); 8 9 f = new Form2(); 10 } 11 12 private void button1_Click(object sender, EventArgs e) 13 { 14 f.Show(); 15 16 Thread.Sleep(10000); 17 18 f.Close(); 19 } 20 }
作業の進行状況を表示する以下のようなプログレスフォームを作りたいということですか?
Form2 にはプログレスバーとボタンがある
プログレスバーは Form1 で行っている作業の進行状況に合わせて状態が変化する
Form2 のボタンを押し、次いでユーザーに確認すると作業を中断し、Form2 は閉じる
Form2 の表示中は Form1 に対してのユーザーの操作は無効になり、進行中の作業を中断することしかできない
質問者さん、最初の投稿以来無言ですが、多々回答がされていますのでそれらに対するフィードバックを返してください。役に立った/立たなかったぐらいの返事はすぐ返せるはず。役に立たなかったならどこが質問者さんの期待と違うのかも書いていただけるとありがたい。とにかく無言は NG です。マナー的にも。
お返事が遅くなり申し訳ありません。
作業の進行状況を表示するようなプログレスフォームを作りたいと考えていました。
その場合、作業自体は非同期処理として実行するということを知らず、すべてUIスレッド上で作成していました。非同期処理について調査し、Taskを使用した非同期処理に変更することにより、プログレスフォームを作成することができました。(プログレスフォーム上の中断ボタンをクリックすると中断させることもできるようになりました)
回答3件
あなたの回答
tips
プレビュー