我有一个位于任务栏中的应用程序,并定期检查数据库(通过SQLConnection).如果数据库无法访问,它只会在通知图标上显示红色状态,而不显示任何其他内容.这是因为用户将使用在设施之间旅行的笔记本电脑,并且数据库只能在内部网络上或通过VPN连接时访问.
我遇到的问题是,当数据库无法访问时,我仍然希望通知图标上下文菜单能够响应.目前,如果用户在数据库尝试连接时尝试与菜单交互,则线程将被锁定并尝试连接.
我想要的是数据库连接发生在一个单独的线程中,但我知道在线程之间共享连接对象是一件坏事.数据库连接后,我需要从原始线程查询它.有什么好办法吗?
我知道我可以在新线程中使用rus函数并简单地检查连接是否失败,然后如果返回成功,原始线程可以继续并连接它自己的数据库对象.但这种方法似乎是一个糟糕的解决方法.想法?
谢谢!
感谢您的建议 - 我从他们那里学到了很多东西.最后,我做了我应该从一开始就做的事情.每当需要定期更新数据库时,主(UI)线程就会启动一个新线程(包括数据库对象创建和连接).
因此,就像HenkHolterman在对我的原始消息的评论中建议的那样,我真的不需要创建数据库并在单独的线程中使用它运行操作.
一旦我升级到VS2010,我一定会对使用SqlConnection.OpenAsync感兴趣.
再次感谢.
我正在升级为特定硬件接口编写的旧应用程序.我现在需要在现有应用程序中添加对现代硬件的支持.
为此,我想为每种硬件类型创建一个类,并在用户选择系统中的哪个硬件时为一种类型或另一种类型分配变量.
例如:
类HardwareType1和类HardwareType2都存在具有相同的成员函数.
object HW;
if (userHwType = 1)
// initialize HW as a HardwareType1 class
}
else{
// initialize HW as a HardwareType2 class
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以HW.doSomething()在整个代码中使用,而不是每次与硬件交互时都没有条件的硬件类型.
我确信这是非常基本的,但说实话,我甚至不知道这个叫什么或者搜索哪个条款.
谢谢!