我想阻止一个函数并等待一个事件然后继续,在我的情况下,当我单击一个按钮时我想要拥有的伪代码:
- 弹出消息框
- 等待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();
}
}
提前致谢