【问题标题】:Unable To Stop Individual SQL Dependencies On Form Close无法在表单关闭时停止单个 SQL 依赖项
【发布时间】:2014-07-23 03:11:17
【问题描述】:

我对 SQL 依赖关系非常陌生,发现这是在我的应用程序中处理数据更新的好方法。以前我每分钟左右都会不断地查询我的数据库以检查更改,而现在我会在更改事件发生时收到更新通知。

当我的应用程序第一次启动时,它会使用:SqlDependency.Start(ConnectionString) 启动对数据库的 SQL 依赖关系,然后在我退出时停止它。

然后我设置了大约 3 或 4 个依赖项查询来接收我的应用程序中不同数据的更新 - 一切都很好,完全符合我的需要。

但是,我的问题是: 我有第二种形式,我称之为多个实例。此表单还附加了大约 3 个不同的依赖项,以再次更新不同的数据。但是,当我关闭表单的实例时,我发现依赖项继续运行,因此由于现在关闭表单而在我的应用程序中引发错误。

我的问题是:有没有办法在我关闭表单后停止单个 SQL 依赖项?主窗体上的依赖项应该继续运行,但每次我打开和关闭第二个窗体的实例时,我都需要停止并启动这些查询运行。

这可能吗?

如果需要,我可以提供示例代码 sn-ps。

任何帮助表示赞赏。谢谢你

【问题讨论】:

    标签: sql-server vb.net sqldependency


    【解决方案1】:

    有一个Stop method in the SqlDependency class,您可以在听完后调用它。这有什么问题吗?

    添加

    根据文档,“停止侦听器以获取在之前的 Start 调用中指定的连接。”

    因此,虽然我从未完全这样做过,但如果您在主表单和子表单中使用不同的连接,它应该可以工作。

    【讨论】:

    • 谢谢加里。退出应用程序后,我调用 .Stop 方法。如果我在退出第二个表单后调用它,那不会停止在主表单上运行的所有 SQL 依赖项吗?
    【解决方案2】:

    好的,经过一番思考和研究,我最终自己解决了这个问题。
    以前,我在与处理程序相同的子例程中声明 SQLDependency,如下所示:

    Private Sub RefreshRegisterData()
        ...
        Dim Register_dep As SqlDependency
        Register_dep = New SqlDependency(cmd)
        AddHandler Register_dep.OnChange, AddressOf Registers_OnChange
        ...
    End Sub
    

    但是,为了解决我的问题,我基本上将 SQLDependency 的范围移到了子例程之外,并在类中全局声明了它:

    Public Class frmStorePage
        Private Register_dep As SqlDependency
        ...
    
        Private Sub RefreshRegisterData()
            ...
            Register_dep = New SqlDependency(cmd)
            AddHandler Register_dep.OnChange, AddressOf Registers_OnChange
            ...
        End Sub
    End Class
    

    然后,当退出我的表单时,我只是实现了一个 RemoveHandler 调用来停止消息队列并销毁现有的处理程序:

    Private Sub frmStorePage_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        RemoveHandler Register_dep.OnChange, AddressOf Registers_OnChange
        ...
    End Sub
    

    现在,不确定这是否是解决此问题的首选方法,但是,我还没有看到此代码的任何含义,它解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多