EventWaitHandle阻塞了整个表单
本文关键字:表单 EventWaitHandle | 更新日期: 2023-09-27 18:23:53
我已经四处寻找了很长一段时间,但没有任何解决方案。。
我想要实现的是使用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()
阻塞,我就无法对整个表单执行任何操作,包括按下第二个按钮或至少关闭它。
我做错了什么?因为我似乎找不到我能找到的示例和我的代码之间的任何区别。
您只有一个线程。UI线程。当你阻止它时,你就阻止了整个UI。
您必须创建第二个线程。
试试这个:
private void button1_Click(object sender, EventArgs e)
{
new Thread() {
void run() {
MessageBox.Show("Thread blocked!");
wh.WaitOne();
MessageBox.Show("Thread unblocked!");
}
}.start();
}