C#で記述されたWindowsフォームアプリケーションでボタンがクリックされた後、別のボタンがクリックされるのを待つ方法は?その間、私は現在の情報によって動的にdatagridviewを更新しています。
編集
button1がクリックされた後、現在の情報でdataGridViewを繰り返し更新したいのですが、button2がクリックされたときに、dataGridViewの更新を停止したいと思います。
タイマー クラスを使用します。
public partial class Form1 : Form
{
System.Windows.Forms.Timer timer;
public Form1()
{
InitializeComponent();
//create it
timer = new Timer();
// set the interval, so it'll fire every 1 sec. (1000 ms)
timer.Interval = 1000;
// bind an event handler
timer.Tick += new EventHandler(timer_Tick);
//...
}
void timer_Tick(object sender, EventArgs e)
{
//do what you need
}
private void button1_Click(object sender, EventArgs e)
{
timer.Start(); //start the timer
// switch buttons
button1.Enabled = false;
button2.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
timer.Stop(); //stop the timer
// switch buttons back
button1.Enabled = true;
button2.Enabled = false;
}
MSDN から:
タイマーは、ユーザー定義の間隔でイベントを発生させるために使用されます。この Windows タイマーは、UI スレッドを使用して処理を実行するシングルスレッド環境向けに設計されています。ユーザー コードで UI メッセージ ポンプを使用できるようにし、常に同じスレッドから操作するか、呼び出しを別のスレッドにマーシャリングする必要があります。
このタイマーを使用する場合は、Tick イベントを使用して、ポーリング操作を実行するか、指定した期間スプラッシュ スクリーンを表示します。Enabled プロパティが true に設定され、Interval プロパティが 0 より大きい場合は常に、Interval プロパティの設定に基づいた間隔で Tick イベントが発生します。
つまり、ボタンAとボタンBがあります。ボタンAが押されたときに、ボタンBが押されるのを待ちたい場合は、何か特別なことをしますか?詳細情報がない場合、最も簡単な方法は次のようなものです。
private void OnButtonAClicked(object sender, EventArgs e)
{
ButtonA.Enabled = false;
ButtonA.Click -= OnButtonAClicked;
ButtonB.Click += OnButtonBClicked;
ButtonB.Enabled = true;
}
private void OnButtonBClicked(object sender, EventArgs e)
{
ButtonB.Enabled = false;
ButtonB.Click -= OnButtonBClicked;
// Do something truly special here
ButtonA.Click += OnButtonAClicked;
ButtonA.Enabled = true;
}
このコードはトグルし(初期状態、ボタンAが有効、ボタンBが無効)、ボタンAが押されると、ボタンBが有効になり、イベントなどを処理します。
BackgroundWorker http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspxを使用します。
UI をフリーズせず、ProgressBar をサポートし、非同期にすることもできます。リンクには、必要な同じ機能を備えた良い例が表示されます(1つのボタンをクリックしてタスクを開始し、別のボタンをクリックしてキャンセルします)。