当前位置:编程学习 > C#/ASP.NET >>

求教多线程问题

我在写一个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就终止线程,然后执行后续的代码? --------------------编程问答-------------------- 通过一个标识变量flag
button1的线程run()如下
void run()
{
  while(flag)
 {
   //...其他
 }
}
点button1把flag置true并启动线程
点button2把flag置false,当本轮循环执行完成,就退出循环,然后线程就结束了 --------------------编程问答-------------------- SLEEP()?线程优先级? --------------------编程问答-------------------- 我也想了解这方面的内容 --------------------编程问答-------------------- 可以使用信号量,获得信号量的线程运行,没有获得信号量的线程等待。 --------------------编程问答--------------------
引用 4 楼 zhaojiangjing 的回复:
可以使用信号量,获得信号量的线程运行,没有获得信号量的线程等待。


是什么意思? --------------------编程问答-------------------- 虽然现在已经按照别的方法做这件事,但是我还是想问问多线程究竟是什么意思?跪求大仙指点一二。。 --------------------编程问答-------------------- //中间加句申明为后台线程,你的死循环放前台不死机已经不错了
threadtest = new Thread(new ThreadStart(run));
threadtest.IsBackground = true;//这句
threadtest.Start();
--------------------编程问答-------------------- 1、把后续代码封装成一个方法 func1();
2、button2点击事件 执行 threadtest.Stop();func1();
3、如果你还有个暂停按钮button3,则在暂停时执行threadtest.Suspend();继续时执行threadtest.Resume();而且还应在threadtest执行结束时回调func1
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,