如何通过与主UI不同的线程调用我的方法?

时间:2010-05-13 14:03:22

标签: c# .net sqlite

我将自己制作的数据访问类(DAL)传递给另一个类,以便它可以使用这些数据访问方法在我的sqlite数据库中存储数据。

这是类型安全的,因为访问数据库的每个方法都会创建自己的连接对象,因此对连接对象的调用始终来自创建它的同一个线程。

我想在我的DAL类中使用一个连接(或连接对象池),如果对我的DAL的所有调用都来自主UI线程,这将正常工作。

从主线程调用时,我的DAL类是否有办法使用连接对象(或它们的池),但如果从后台线程调用则使用不同的连接对象?

2 个答案:

答案 0 :(得分:5)

您可以在任何WinForms InvokeRequired派生类型上调用Control来确定您是否在主线程上。如果InvokeRequired返回true,那么您不在主UI线程上。

如果您使用的是WPF,则可以在其中一个UI元素的Dispatcher.CheckAccess属性上调用DependencyObject.Dispatcher。如果CheckAccess返回true,则它是主UI线程。

答案 1 :(得分:1)

if (!mainForm.InvokeRequired)
{
    // running on the UI thread
}
else
{
    // running on a different thread
}

(您可以使用任何控件代替mainForm