如何检查是否在主线程中创建了对象

时间:2016-06-01 07:55:03

标签: c# .net wpf multithreading mvvm

我在WPF(C#)中没有回答时遇到问题,我想要一些帮助。

我想检查是否在主(UI)线程中创建了一个对象,有没有办法做到这一点?

(列表,集合等对象)

修改

我正在尝试减少Dispatcher.Invoke(和Dispatcher.CheckAccsess)的使用,因为它会降低系统速度。

我有一个对象,当它绑定到UI时我需要调用,但很多时候它是在不同的线程中创建的,并且不需要在Invoke中,它可以从当前线程设置。

1 个答案:

答案 0 :(得分:1)

您可以使用扩展方法进行检查:

public static void Invoke<T>(this T c, Action<T> action) where T : Control
{
    if (c.Dispatcher.CheckAccess()))
        control.Dispatcher.Invoke(...)
    else
        action(c);
}

(基于A better way to write extension method to invoke a control?

除了使用扩展方法创建更好看的代码之外,无法检查用于创建对象的胎面。

您使用的是async / await吗?因为这可能会减少执行此操作的需要。你能展示一些从另一个线程访问UI的代码吗?也许你可以减少这种情况。