代码之家  ›  专栏  ›  技术社区  ›  Neil Trodden

我如何判断我的方法是否由与主UI不同的线程调用?

  •  1
  • Neil Trodden  · 技术社区  · 16 年前

    我将自己创建的数据访问类(DAL)传递到另一个类中,这样它就可以使用这些数据访问方法将数据存储在sqlite数据库中。

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

    我只想在我的DAL类中使用一个连接(或一个连接对象池),如果对我的DAL的所有调用都来自主UI线程,那么这样就可以了。

    当从主线程调用时,我的DAL类有没有一种方法可以使用一个连接对象(或它们的池),但如果从后台线程调用,则使用另一个连接对象?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Jeff Yates    16 年前

    你可以打电话 InvokeRequired Control -派生类型来确定是否在主线程上。如果 true

    如果你使用WPF,你可以打电话给 Dispatcher.CheckAccess DependencyObject.Dispatcher 属性。如果 CheckAccess 返回true,它是主UI线程。

        2
  •  1
  •   Thomas Levesque    16 年前
    if (!mainForm.InvokeRequired)
    {
        // running on the UI thread
    }
    else
    {
        // running on a different thread
    }
    

    (您可以使用任何控件而不是 mainForm )