我一直在寻找相当长的一段时间,但没有任何解决方案..
我想要实现的是使用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()
阻止,我就无法对整个表单执行任何操作,包括按下第二个按钮或至少关闭它..
我做错了什么?因为我无法找到我能找到的例子与我的代码之间的任何区别。
答案 0 :(得分:1)
你只有一个帖子。 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();
}