我想阻止功能,並等待一個事件,然後繼續,在我的情況下,僞代碼,我想有當我點擊一個按鈕:塊功能,並等待事件C#
- 流行高達消息框
- 等待在datagridview的事件點擊
- 彈出messagebox2
- 等待在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();
}
}
在此先感謝
所以你認爲阻止UI線程是合理的,直到發生什麼事情,用戶沒有辦法關閉應用程序,移動窗口等? – 2012-07-21 06:58:43
如果我正確地獲取代碼,@geogeek不會阻止UI線程,因爲在單獨的線程上調用了「th_replace」和「th_remove」。我同意你,他不應該阻止UI線程。請糾正我,如果我錯了。 – 2012-07-21 07:04:07
我錯過了一個工作在一個新的線程不同的UI的整個功能,在調試過程中我有一些用戶界面凍結,但現在它工作良好,當我使用一個新的線程 – geogeek 2012-07-21 10:24:33