Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查是否在主线程中创建了对象_C#_.net_Wpf_Multithreading_Mvvm - Fatal编程技术网

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

C# 如何检查是否在主线程中创建了对象,c#,.net,wpf,multithreading,mvvm,C#,.net,Wpf,Multithreading,Mvvm,我在WPF(C#)中遇到了一个没有答案的问题,我想得到一些帮助 我想检查是否在主(UI)线程中创建了一个对象,有没有办法 (对象,如列表、集合等) 编辑 我试图减少Dispatcher.Invoke(和Dispatcher.checkaccess)的使用,因为这会降低系统的速度 我有一个对象,当它绑定到UI时,我需要调用,但很多时候它是在不同的线程中创建的,不需要调用,它可以从当前线程进行设置。您可以在扩展方法中进行检查: public static void Invoke<T>(t

我在WPF(C#)中遇到了一个没有答案的问题,我想得到一些帮助

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

(对象,如列表、集合等)

编辑 我试图减少Dispatcher.Invoke(和Dispatcher.checkaccess)的使用,因为这会降低系统的速度


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

您可以在扩展方法中进行检查:

public static void Invoke<T>(this T c, Action<T> action) where T : Control
{
    if (c.Dispatcher.CheckAccess()))
        control.Dispatcher.Invoke(...)
    else
        action(c);
}
publicstaticvoidinvoke(这个tc,Action-Action),其中T:Control
{
if(c.Dispatcher.CheckAccess())
control.Dispatcher.Invoke(…)
其他的
行动(c);
}
(基于)

除此之外,使用扩展方法创建外观更好的代码无法检查创建对象时使用了什么样的踏板


您正在使用async/await吗?因为这可能会减少这样做的必要性。你能展示一些你从另一个线程访问UI的代码吗?也许你可以减少这种情况。

你到底为什么要这样做?你能多告诉我一点你想解决的问题吗?也许还有其他方法可以修复您遇到的任何问题。首先,定义“主线程”。@DannyChen我想他指的是UI线程……诸如“列表、集合等”之类的对象没有任何线程关联性,因此您不可能也不清楚为什么要这样做。@PeterBons,我编辑了您邀请查看的问题