private void btnStart_Click(object sender, System.EventArgs e)
{
f(...);//参数略 //这里启动线程,现程通过委托函数调用f. f(...);//参数略
}public Mutex mWork = new Mutex();
private void f(...)
{
mWork.WaitOne();
mWork.ReleaseMutex();
}
btnStart_Click中第二次调用f出现问题。waitone()出现死锁,结构上有问题吗?
{
f(...);//参数略 //这里启动线程,现程通过委托函数调用f. f(...);//参数略
}public Mutex mWork = new Mutex();
private void f(...)
{
mWork.WaitOne();
mWork.ReleaseMutex();
}
btnStart_Click中第二次调用f出现问题。waitone()出现死锁,结构上有问题吗?
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx
private void f(...)
{
mWork.WaitOne();
ListViewItem tempList=new ListViewItem(...);//参数略
this.listView1.Items.Insert(0,tempList);//listView1是界面上一个ListView,主线程与子线程都在这里输出信息到界面
mWork.ReleaseMutex();
}
是主界面线程出现死锁。一旦子线程抢在主线程第二个f()前调用委托函数,主线程调试运行到mWork.WaitOne()就跑不下。但把this.listView1.Items.Insert(0,tempList)一句注释掉,就可以运行。
这是什么原因?
{
this.listView1.Items.Insert(0,tempList);
}private void f(...)
{
mWork.WaitOne();
ListViewItem tempList=new ListViewItem(...);//参数略
MyInvoke mi=new MyInvoke(InsertViewItem);
this.BeginInvoke(mi,new object[]{tempList});
mWork.ReleaseMutex();
}