我在写一个winform程序,点button1会循环调用别的project的程序,运行大约几分钟,现在想要加一个button2,终止button1的程序运行,多线程应该可以解决这个问题。。我已经尝试用上thread,不过结果不好,代码太多,不贴上来了,大概就是这个样子:private Thread threadtest;
private delegate void Delegatetest(object objTest, string strMethod);
private Delegatetest delegatetest;button1事件{
delegatetest = new Delegatetest(invokemethod);
threadtest = new Thread(new ThreadStart(run));
threadtest.Start();//后续的代码
//……}run(){ //invoke另一个project的方法 }但是现在的问题是,thread.start()以后,程序并不运行thread之中的方法,而是把后续的代码都运行完之后才开始运行thread之中的方法,于是我加上了threadtest.join(),但是程序运行到join这一行之后,就没有反应了,在vs里点一下暂停,也一直停留在join这行,是不是我理解有误?怎么样才可以实现不点stop就像没有加thread一样顺利运行完程序,点了stop就终止线程,然后执行后续的代码?

解决方案 »

  1.   

    通过一个标识变量flag
    button1的线程run()如下
    void run()
    {
      while(flag)
     {
       //...其他
     }
    }
    点button1把flag置true并启动线程
    点button2把flag置false,当本轮循环执行完成,就退出循环,然后线程就结束了
      

  2.   

    //中间加句申明为后台线程,你的死循环放前台不死机已经不错了
    threadtest = new Thread(new ThreadStart(run));
    threadtest.IsBackground = true;//这句
    threadtest.Start();
      

  3.   

    1、把后续代码封装成一个方法 func1();
    2、button2点击事件 执行 threadtest.Stop();func1();
    3、如果你还有个暂停按钮button3,则在暂停时执行threadtest.Suspend();继续时执行threadtest.Resume();而且还应在threadtest执行结束时回调func1