2010-08-31 147 views
1

当前一个事件处理程序的调用没有完成时,SqlDependency(例如)是否触发了OnChange事件? (假设OnDependencyChange方法非常耗时) 究竟发生了什么?当事件处理程序没有完成时事件是否被触发?

SqlDependency dependency=new SqlDependency(command); 


// Subscribe to the SqlDependency event. 
dependency.OnChange += new 
OnChangeEventHandler(OnDependencyChange); 

回答

2

我并不熟悉SqlDependency类,但每MSDN documenation:

可在 生成OnChange事件从线程 发起命令执行不同的线程。

这似乎打开了两个事件处理程序可以同时运行的可能性。没有任何文档指出,在事件再次升级之前,所有事件处理程序都必须完成。要做的安全事情是假设可能发生多个同时发生的事件调用。由于事件是在未定义的线程中引发的,因此无论如何您都必须防范并发性问题。

+0

谢谢,所以我将不得不准备一些不确定的行为:) – nan 2010-09-03 13:14:32

0

在正常的单线程程序中,它不会。请尝试以下操作:

添加Windows窗体应用程序。向表单添加一个按钮。使用下面的方法来处理按钮的单击事件:

private void Buttonclick(object sender, EventArgs e) 
{ 
    Thread.Sleep(25);//SUSPEND CURRENT THREAD 
} 

您将无法点击按钮,直到调用Thread.Sleep(25)完成其工作(暂停25秒线程)。你也可以在控制台应用程序中测试它。

相关问题