我在WPF(C#)中没有回答时遇到问题,我想要一些帮助。
我想检查是否在主(UI)线程中创建了一个对象,有没有办法做到这一点?
(列表,集合等对象)
我正在尝试减少Dispatcher.Invoke(和Dispatcher.CheckAccsess)的使用,因为它会降低系统速度。
我有一个对象,当它绑定到UI时我需要调用,但很多时候它是在不同的线程中创建的,并且不需要在Invoke中,它可以从当前线程设置。
答案 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的代码吗?也许你可以减少这种情况。