関数をブロックしてイベントを待ってから続行したいのですが、私の場合は、ボタンをクリックしたときに必要な擬似コードです。
- メッセージボックスをポップアップします
- datagridviewでイベントクリックを待つ
- メッセージボックス2をポップアップします
- datagridviewでイベントクリックを待つ
- はい/いいえのメッセージボックスをポップアップします
- 別の機能を実行する
しかし、実際のコードはautoevent.Set()関数を待たないので、メイン関数をブロックしたい間、スレッドによって呼び出された関数はブロックされたままになります。
ManualResetEventとAutoResetEventを試しました。これは、AutoResetEventに使用したコードです。
public partial class person : Form
{
AutoResetEvent auto = new AutoResetEvent(false);
private void button1_Click(object sender, EventArgs e)
{
int old_id, new_id;
//dataGridView1.ClearSelection();
Thread t1 = new Thread(new ThreadStart(th_remove));
Thread t2 = new Thread(new ThreadStart(th_replace));
t1.Start();
old_id = (int)dataGridView1.SelectedRows[0].Cells[1].Value;
t2.Start();
new_id = (int)dataGridView1.SelectedRows[0].Cells[1].Value;
DialogResult dialogResult = MessageBox.Show("Remplacer", "Vous êtes sûr de vouloir remplacer ?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
db.replace("person", new_id, old_id);
}
}
private void th_replace()
{
auto.WaitOne();
MessageBox.Show("Seléctionnez la ligne remplaçante");
}
private void th_remove()
{
auto.WaitOne();
MessageBox.Show("Seléctionnez la ligne à supprimer");
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
auto.Set();
}
}
前もって感謝します