我正在实现SQLdepenency,我想知道在依赖处理程序执行的情况下,它是否会从主进程中旋转出不同的thred?当事件处理程序触发时会发生什么?我需要担心任何多线程的问题吗?
public void CreateSqlDependency()
{
try
{
using (SqlConnection connection = (SqlConnection)DBFactory.GetDBFactoryConnection(Constants.SQL_PROVIDER_NAME))
{
SqlCommand command = (SqlCommand)DBFactory.GetCommand(Constants.SQL_PROVIDER_NAME);
command.CommandText = watchQuery;
command.CommandType = CommandType.Text;
SqlDependency dependency = new SqlDependency(command);
//Create the callback object
dependency.OnChange += new OnChangeEventHandler(this.QueueChangeNotificationHandler);
SqlDependency.Start(connectionString);
DataTable dataTable = DBFactory.ExecuteSPReDT(command);
}
}
catch (SqlException sqlExp)
{
throw sqlExp;
}
catch (Exception ex)
{
throw ex;
}
}
public void QueueChangeNotificationHandler(object caller, SqlNotificationEventArgs e)
{
if(e.Info == SqlNotificationInfo.Insert)
Fire();
}发布于 2010-12-14 17:44:57
它在单独的线程中工作,但所有通知只有一个这样的线程。看看this article中的SQLDependency部分
发布于 2010-04-28 23:30:51
MSDN上的SqlDependency文档提到了OnChange事件可能是在与启动命令执行的线程不同的线程上生成的。
您应该阅读来自MSDN的Detecting Changes with SqlDependency (ADO.NET)文章,其中解释了类似的场景。
发布于 2010-04-29 03:46:01
它将产生一个新的工作线程来等待依赖性通知--但这正是您想要的(否则,您的主程序循环将会等待一些可能永远不会发生的事情!)。
this page上的示例代码展示了如何避免获得依赖项/查询通知的工作线程无权更新UI的问题;他们的方法将任务传递给UI线程以使其成功(请参见步骤#12)。
https://stackoverflow.com/questions/2730798
复制相似问题