繁体   English   中英

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

[英]How can I tell if my method is being called by a different thread than the main UI one?

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

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

我只想在我的DAL类中使用一个连接(或一组连接对象),如果对我的DAL的所有调用都来自主UI线程,则此方法可以很好地工作。

从主线程调用时,我的DAL类是否可以使用连接对象(或它们的池),但是如果从后台线程调用,则可以使用其他连接对象?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM