栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SqlDependency OnChange不触发

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SqlDependency OnChange不触发

我希望这是我犯的一个愚蠢的错误。

不幸的是(或者幸运的是?)您犯了几个错误。

  1. 首先,您需要了解查询通知将使 一个查询 无效。因此,您最多只会收到 一次 通知,如果您想接收更多通知,则必须重新订阅(重新提交查询)。

  2. 接下来,您需要了解,由于 任何 原因,您不仅会收到更改通知,还会收到通知。在回调中,您 必须 检查通过传入的通知原因

    SqlNotificationEventArgs

  3. 接下来,您需要了解异步编程的基本原理:如果订阅事件,请确保在事件第一次发生 之前* 就进行订阅。恰当的例子: 您提交查询后,便会立即

    On_SqlBitChanged
    触发。这 应该 在构造函数中发生,但是您可以 构造函数运行 订阅。在挂接事件回调之前,可以在构造函数完成之间调用它,在这种情况下,该通知将被静默忽略。 *
    SqlWatcher.SqlWatcher``sqlWatcher.NewMessage
    On_SqlBitChanged``NewMessage

  4. 如果要使用服务,请确保 使用 将其启动。您在中使用SqlDependency,

    SqlWatcher.SqlWatcher
    随后 在调用时启动它
    SqlWatcher.Start()

  5. 最后,如果您希望收到有关查询更改的通知, 则必须提交查询 。您正在构造

    SqlCommand
    对象,设置通知,然后…丢弃对象。除非您实际提交查询,否则您还没有预订 任何东西

修复建议:

  • Make
    Start
    Stop
    statics,调用
    Start
    应用程序启动。
  • NewMessage
    提交查询 之前, 请确保已订阅
  • 实际提交查询(致电
    SqlComamnd.ExecuteQuery()
  • 检查
    Info
    Type
    然后
    Source
    On_SqlBitChanged
    回调中,如果您的提交包含错误,则这是学习的唯一方法(即使通知请求无效,SqlComamnd.ExecuteQuery()也会成功)
  • 收到更改通知后,您必须重新订阅,然后再次执行查询。

还有一件事:不要在后台回调中调用UI代码。您不能

MessageBox.Show("MessageReceived");
从回调中调用,必须通过路由通过表单主线程
Form.Invoke
。是的,我知道严格来说,
MessageBox.Show
它确实 适用于非UI线程,但是您很快就会离开警报框而真正形成交互作用,然后一切都会中断。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号