有点长~~我把辅线程的..贴出来public void get_data() { int num1, num2; Random rand = new Random(); //随机数 while (true) { mUnique.WaitOne(); mUnique.Close(); do { num1 = rand.Next(6); } while (num1 == 0); do { num2 = rand.Next(5); } while (num2 == 0); ProEventArgs e = new ProEventArgs(num1, num2);
Proevent(this, e); } } public void Suspend() { if (!blnSuspended) { blnSuspended = true; mUnique.WaitOne(); } } public void Resume() { if (blnSuspended) { blnSuspended = false; mUnique.Close(); } } }
问题可能出在这里: while (true) ----------------- 你这个判断没用,无论如何他都执行mUnique.WaitOne(); mUnique.Close(); 你的线程当然死锁
1.你应该用 EventWaitHandle 2. ProEventArgs e = new ProEventArgs(num1, num2);
{
int num1, num2;
Random rand = new Random(); //随机数 while (true)
{
mUnique.WaitOne();
mUnique.Close();
do
{
num1 = rand.Next(6);
} while (num1 == 0);
do
{
num2 = rand.Next(5);
} while (num2 == 0); ProEventArgs e = new ProEventArgs(num1, num2);
Proevent(this, e); }
}
public void Suspend()
{
if (!blnSuspended)
{
blnSuspended = true;
mUnique.WaitOne();
}
}
public void Resume()
{
if (blnSuspended)
{
blnSuspended = false;
mUnique.Close();
}
}
}
while (true)
-----------------
你这个判断没用,无论如何他都执行mUnique.WaitOne(); mUnique.Close(); 你的线程当然死锁
2. ProEventArgs e = new ProEventArgs(num1, num2);
Proevent(this, e);
此处实应为Event.Set ();
3. 主线程等待数据时使用WaitOne()
Proevent(this, e);像你这种方法,接收数据的线程,也就是事件处理函数所在线程还是这个线程本身,,你知道吗?
我试试去~~谢拉~~^O^~~
对了..Event.Set (); 怎么用啊`??没有用过O~
也用waitone()`?