首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLDependency线程

SQLDependency线程
EN

Stack Overflow用户
提问于 2010-04-28 23:19:12
回答 4查看 5.2K关注 0票数 3

我正在实现SQLdepenency,我想知道在依赖处理程序执行的情况下,它是否会从主进程中旋转出不同的thred?当事件处理程序触发时会发生什么?我需要担心任何多线程的问题吗?

代码语言:javascript
复制
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();
}
EN

回答 4

Stack Overflow用户

发布于 2010-12-14 17:44:57

它在单独的线程中工作,但所有通知只有一个这样的线程。看看this article中的SQLDependency部分

票数 2
EN

Stack Overflow用户

发布于 2010-04-28 23:30:51

MSDN上的SqlDependency文档提到了OnChange事件可能是在与启动命令执行的线程不同的线程上生成的。

您应该阅读来自MSDN的Detecting Changes with SqlDependency (ADO.NET)文章,其中解释了类似的场景。

票数 0
EN

Stack Overflow用户

发布于 2010-04-29 03:46:01

它将产生一个新的工作线程来等待依赖性通知--但这正是您想要的(否则,您的主程序循环将会等待一些可能永远不会发生的事情!)。

this page上的示例代码展示了如何避免获得依赖项/查询通知的工作线程无权更新UI的问题;他们的方法将任务传递给UI线程以使其成功(请参见步骤#12)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2730798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档