Я искал вокруг в течение довольно продолжительного времени, но без какого-либо решения ..EventWaitHandle блокирует всю форму
Что я хочу достичь, это использовать класс EventWaitHandle для того, чтобы приостановить одну нить.
Итак, я создаю две кнопки на форме. Первый должен отправить сообщение, затем сделать паузу, а второй - приостановить поток первой кнопки, который затем отправит другое сообщение. Как что:
using System;
using System.Windows.Forms;
using System.Threading;
namespace Application
{
public partial class Form1 : Form
{
EventWaitHandle wh = new AutoResetEvent(false);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Thread blocked!");
wh.WaitOne();
MessageBox.Show("Thread unblocked!");
}
private void button2_Click(object sender, EventArgs e)
{
wh.Set();
}
}
}
Но как только поток блокируется с wh.WaitOne()
, я ничего не могу по всей форме, в том числе нажав на вторую кнопку или, по крайней мере, закрыть его сделать ..
Что я сделал не так? Потому что я не могу найти разницы между примерами, которые мог найти, и моим кодом.
Спасибо за быстрый ответ! Но где я должен поместить класс обработки wait Event, чтобы только приостановить код, который выполняется при нажатии первой кнопки. Я попытался поместить его в разные места, но с тем же результатом. –
Я отредактировал с примером того, как «исправить» ваш код. – Shloim
Хорошо спасибо! Я не знал, что смогу это сделать, поскольку я довольно новичок в многопоточности и программировании в целом. Еще раз спасибо, и у меня хороший день! –