我有一个应用程序位于任务栏中并定期检查数据库(通过 SQLConnection)。如果数据库无法访问,它只会在通知图标上显示红色状态,而不是其他任何内容。这是因为用户将使用笔记本电脑在设施之间旅行,并且数据库只能在内部网络上或通过 VPN 连接时访问。
我遇到的问题是,当数据库无法访问时,我仍然希望通知图标上下文菜单能够响应。当前,如果用户在数据库尝试连接时尝试与菜单交互,则线程会因连接尝试而被锁定。
我希望数据库连接发生在一个单独的线程中,但我知道在线程之间共享连接对象是一件坏事。连接数据库后,我需要从原始线程中查询它。有什么好的方法可以做到这一点吗?
我知道我可以有一个在新线程中运行的函数并简单地检查连接是否失败,然后如果返回成功,则原始线程可以继续并连接它自己的数据库对象。但这种方法似乎是一个糟糕的解决方法。想法?
谢谢!
感谢您的建议 - 我从他们那里学到了很多东西。最后,我做了我从一开始就应该做的事情。每当需要定期更新数据库时,主 (UI) 线程就会启动一个新线程(包括数据库对象创建和连接)。
因此,就像 HenkHolterman 在对我的原始消息的评论中建议的那样,我真的不需要创建数据库并在单独的线程中使用它运行操作。
一旦我升级到 VS2010,我肯定会对使用 SqlConnection.OpenAsync 感兴趣。
再次感谢。