【发布时间】:2011-10-28 16:11:11
【问题描述】:
我正在调试在本地开发服务器(卡西尼?)中运行的 VS2010 中的 WebProject。其中一个 aspx 页面调用 ManualResetEvent.WaitOne(),另一个 Page aspx 页面调用 ManualResetEvent.Set()(在同一个全局对象上)以释放第一页。
当我查看 VS2010 中的线程列表时,似乎有很多工作线程。但是,Web 服务器似乎在被 ManualResetEvent.WaitOne() 调用阻止时停止处理任何内容。因此,除非 .WaitOne() 超时,否则 ManualResetEvent.Set() 不会加载。
这里发生了什么?
// Sample Code
Class SyncTest {
private System.Threading.ManualResetEvent eConnected =
new System.Threading.ManualResetEvent(false);
private bool isConnected;
public SyncTest ()
{
this.isConnected = false;
}
public void SetConnected(bool state)
{
isConnected = state;
if (state)
eConnected.Set();
else
eConnected.Reset();
}
public bool WaitForConnection(int timeout)
{
return eConnected.WaitOne(timeout);
}
}
【问题讨论】:
-
你不应该真的停止主执行线程。这在您启动的工作线程上可以正常工作。同样,如果您想跨会话交谈,则使用应用程序对象有更好的机制。
-
@SimonHalsey Main exec 线程不受此影响。确实和Session锁有关。
标签: asp.net multithreading visual-studio cassini