【发布时间】:2010-05-05 21:56:02
【问题描述】:
我正在尝试根据后台线程上的轮询禁用 .NET 应用程序中的部分 UI。后台线程检查应用使用的全局数据库连接是否仍然打开且可操作。
我需要做的,并且更愿意在不轮询 UI 线程的情况下这样做,是添加一个事件处理程序,如果连接状态发生变化,它可以由后台线程引发。这样,任何表单都可以有一个处理程序来禁用那些需要连接才能运行的 UI 部分。
尝试在包含线程子线程的类中使用直接事件声明,并在后台线程中引发事件,从而导致有关从其他线程访问 UI 控件的跨线程执行错误。
显然,有一种正确的方法可以做到这一点,但我们在事件(主要是单线程应用程序)方面的经验有限,而在委托方面几乎没有经验。我已经阅读了代表的文档和示例,它似乎更接近我们的需要,但我不确定如何使它在这种情况下工作。
该应用程序主要使用 VB.NET 编写,但也可以使用 C# 提供示例或帮助。
【问题讨论】:
-
在 dotNET 中,您不应该有一个持续打开的全局连接。阅读 ConnectionPooling。 stackoverflow.com/questions/2715714
-
@Henk Holterman:如果您不了解他的情况,您不能发表此声明。此外,不建议使用 Microsoft 包含在框架中的提供程序。
-
@AMissico:使用我下面的技术,没关系(它同样适用于两者......)
-
@AMissico,什么不推荐?
-
@Henk Holterman:不建议维护打开的连接,因为 Microsoft 包含在框架中的提供程序是为连接池而设计的,就像您提到的那样。然而,并非所有提供商都是这样设计的。
标签: .net multithreading events delegates