如何通过改变公共变量 控制子线程的运行?

有时想起 2017-10-31 04:09:34

public bool flag=false;
主线程:

....
{
Thread t=new Thread(new ThreadStart(work));
t.Start();
.....
这里通过给flag置位或者清位,无法控制子线程进入A还是B
eg:
flag=true;
......
flag=false;
}

子线程:

public void work
{
if(flag)
{
.....A
}
else
{
.....B
}
}
...全文
231 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
㤁孞 2017-11-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/dragoo1/article/details/54964771
秋的红果实 2017-11-01
  • 打赏
  • 举报
回复
flag不能直接赋值 要用Interlocked,如

Interlocked.Exchange(ref flag, true);  
更多应用自己搜索下
guanyinsishengzi 2017-11-01
  • 打赏
  • 举报
回复
不要用死循环 子线程:

public void work(object obj)
{
bool flag=(bool)obj
if(flag)
{
.....A
}
else
{
.....B
}
}
主线程

Thread t = new Thread(new ThreadStart(work));
t.Start(true/false);
有时想起 2017-11-01
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
线程转瞬(几毫秒、几十毫秒)既逝了。你这个线程概念甚至都不纠结于什么“死循环”了,还要什么“公共变量”呢?逻辑完全没有建立起来。
写错了


public void work
{
while(true)
{
if(flag)
{
.....A
}
else
{
.....B
}
}
}
  • 打赏
  • 举报
回复
线程转瞬(几毫秒、几十毫秒)既逝了。你这个线程概念甚至都不纠结于什么“死循环”了,还要什么“公共变量”呢?逻辑完全没有建立起来。
白衣如花 2017-10-31
  • 打赏
  • 举报
回复
就用公共变量就好 经常写类似的代码: // 线程 while (isRun) { .... } public void Stop() { isRun = false; }
xdashewan 2017-10-31
  • 打赏
  • 举报
回复
可以使用ManualResetEvent来手动等待标志位置位

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧