我在做一个文件搜索的窗口时,开了一个线程来显示当前所索的文件名(更新Label.Text),但搜索完之后我想弹出一个对话框来显示搜索的结果(MessageBox.Show()),但是弹出对话框的时机总是不对,我一点开始搜索,他就弹出了,
源码:
private void button1_Click(object sender, EventArgs e)
        {
            
            drawThread = new Thread(new ThreadStart(FindFile));
            //FindFile()为工作线程的函数
            
            drawThread.Start();
            MessageBox.Show("显示搜索结果");
------------
哪位能帮我看看是什么原因吗?,我想在线程结束后才显示对话框

解决方案 »

  1.   

    MessageBox.Show("显示搜索结果"); 是在主线程执行,FindFile在新线程执行,两个线程同时执行,就出现你说的情况。MessageBox.Show("显示搜索结果");  这句挪到FindFile方法的末尾,搜索完毕后弹出对话框,你关闭对话框后该线程的任务就算结束了,这样不行吗。
      

  2.   

    to liuys00() :
    你说的方法我当时也试了,只是我要对窗口其它控件做下一步操作,如:label2显示共搜索了多少个文件。这种操作是要控制工作线程外的线程所创造的控件,是不允许。所以不能放到FindFile()这个方法中去
      

  3.   

    FindFile 执行结束Call主线程的的一个方法不就可以了。void FindFile()
    {
       ....
       Finished();
    }void Finished()
    {
       MessageBox.Show("Over");
    }
      

  4.   

    1.在 FindFile 返回前设置变量   finished = true;
    2.
    drawThread = new Thread(new ThreadStart(FindFile));
    drawThread.Start();
    while (false == finished)
    {
       Thread.Sleep(100);  //  休眠的值不要太小,也不要太大,可能需要运行几次才能找到合适的值
    }
    MessageBox.Show("显示搜索结果");
      

  5.   

    或者:drawThread = new Thread(new ThreadStart(FindFile));
    drawThread.Start();
    drawThread.Join();
    MessageBox.Show("显示搜索结果");
      

  6.   

    System.Threading.Thread.Sleep(时间间隔);
    如果不确定时间,办法还是有的,就是不清楚FindFile()里
    是个什么情况,做个标识位呢
    if(biaoshi==1)
    {
    MessageBox.Show("显示搜索结果");
    }
      

  7.   

    可以将MessageBox.Show("显示搜索结果");放在线程里,这样不就可以了
      

  8.   

    我最后用的是用Timer控件来侦测一个bool型的ISStop变量,每隔一段时间看线程是否做完。感觉这样子做很不专业,现在的问题是无法在线程工作完毕后,主线程才开始继续工作。