【发布时间】:2011-11-07 18:38:52
【问题描述】:
我有一个方法可以监听通过流发送的数据。因为 networkstream.read 方法是同步的,所以我必须在单独的线程上执行它。所以我在一个单独的线程上执行的方法是:
void someMethod(param1, param2....)
{
try{
while( stream.read(data...) != 0 ) // code waits here until data is received
{
// do stufff
}
}catch{}//
}
我能够退出该线程的唯一方法是关闭流,然后执行 catch 块。我有时需要开始侦听同一流上的数据,但使用不同的方法。因此,如果我将线程创建为 Thread t = new Thread(new threadstart(somemethod......) 然后执行 t.start(someObject); 稍后当我执行 t.abort() 时;该方法仍将监听数据。如何终止它?
我也尝试过创建一个全局变量,例如:
bool someBoolean = false;
void someMethod(param1, param2....)
{
try{
while(someBoolean ==false && stream.read(data...) != 0 ) // code waits here until data is received
{
// do stufff
}
}catch{}//
}
然后我发现我将 someBoolean 更改为 true,该方法将停止执行。由于某种原因,它没有。为什么?似乎 someBoolean 一次是两个变量。因为从主线程更改它的值似乎不会影响它对第二个线程...
【问题讨论】:
-
你应该以缓冲的方式从流中读取,意味着同时读取少量数据。显示有关您如何阅读和做事以及线程工作方式的真实代码...
-
stream.Read将阻塞直到数据可用,因此此时设置布尔值无济于事。
标签: c# multithreading