我用了例程的那个缓冲队列可是还是没有我要的效果啊,还是会"死掉"如下我的程序代码:类似:processbutton_click,往队列添加文件:
private void button4_Click(object sender, System.EventArgs e)
{
FileInfo f = new FileInfo();
f.fName=this.filename_box.Text;
while ( req_queue.isEmpty()!=1)
{
if( req_queue.isEmpty() == 1 )
break;
Thread.Sleep(200);
}
req_queue.add(f);
}构造函数修改如下:监视线程修改为QueueMonitorfunc2
public filedisplayer()
{
InitializeComponent();
req_queue = new RequestQueue();
req_queue.setSize(5);
m_bAbort = false;//默认监视线程没有终止
QueueMonitorThread = new Thread( new ThreadStart(QueueMonitorfunc2));//监视线程修改为QueueMonitorfunc2
QueueMonitorThread.Start();
//代理更新TreeView,BeginInvoke
onTreeViewElement = new ThreadEventDelegate(populateTreeView);
}监视线程:基本都没有变化,修改了调用函数parse为parse2public void QueueMonitorfunc2()
{
while( true)
{
if(isAbort())
{
break;
}
Object o = req_queue.getFile();
if( (o  is FileInfo ))
{
FileInfo f = (FileInfo)req_queue.getFile();
string filename = f.fName;
parse2(f);//修改调用函数
req_queue.remove();
}
Thread.Sleep(500);//每隔半秒钟扫描
}
}//新的调用函数
private void parse2(FileInfo info)
{
Thread t =new Thread(new ThreadStart(ppp));
t.Start ();
t.Join (Timeout.Infinite);
}下面也是同样的调用方式.
private void ppp()
{
for(int i=0;i<1000;i++)
{
BeginInvoke(new dele(addNode));
} }
private delegate void dele();
private int j=0;
private void addNode()
{
this.treeView1.Nodes.Add(j.ToString());
//this.treeView1.Refresh();
//Thread.Sleep(100);
j++;

}怎么回事?