C# 如何访问主线程

C# 如何访问主线程,c#,multithreading,C#,Multithreading,有没有办法从另一个工作线程获取对Windows窗体中主UI线程的引用 大概是这样的: public void FormLoad()//we are in Main UI Thread { Thread backThread = new Thread(DoWork); backThread.Start(); } public void DoWork() { //get Main Thread instance

有没有办法从另一个工作线程获取对Windows窗体中主UI线程的引用

大概是这样的:

public void FormLoad()//we are in Main UI Thread
    {
        Thread backThread = new Thread(DoWork);
        backThread.Start();

    }
    public void DoWork()
    {
        //get Main Thread instance
        //do some work
    }
更新

我感兴趣的是,是否有一些静态属性或类可以获取对主线程的引用,比如thread.CurrentThread,以获取当前线程

Thread MainThread=null;//for reference
public void FormLoad()//we are in Main UI Thread
    {
        MainThread=Thread.CurrentThread;//main thread reference
        Thread backThread = new Thread(DoWork);
        backThread.Start();

    }
    public void DoWork()
    {
        //get Main Thread instance
        //do some work
    }

这应该有用

好的,您可以始终使用ParameterizedThreadStart启动线程并向其发送参数,因为它是一个对象,您可以向调用线程传递引用。

a找到它的方法是:

var MainThread = (from x in MyProcess.Threads.Cast<ProcessThread>() orderby x.StartTime select x).First();
var MainThread=(从MyProcess.Threads.Cast()中的x开始按x.StartTime选择x);

了解
线程
实例不会有帮助,因为这不允许您做任何有用的事情。您大概想要的是能够让主线程做一些事情(比如:更新自身)

在windows窗体中,您应该有一个同步上下文;只需访问
SynchronizationContext.Current
,应该能够使用
Post
Send
将工作传递给主线程

或者,如果这不起作用(环境同步上下文为
null
):将任何控件/表单传递给工作人员;然后它可以调用
Invoke
/
BeginInvoke
将工作传递给主线程



另一种方法是公开您调用的事件,让UI侦听该事件,并让UI处理切换回主线程的问题,方法是在自身上调用
Invoke
/
BeginInvoke
(处理事件时)。

什么是“获取线程实例”?是否要从另一个线程调用主线程中的方法?@steavy为什么需要访问主线程?要更改控件的某些属性,通常只需将所需信息发送到线程。你尝试过什么?听起来像是将实例传递给新类。我需要知道主线程的状态。我需要知道在后线程中,主线程目前正在做什么。是的,当然,这应该可以。但是
是否有一些静态属性,所以我不应该在FormLoad中显式存储引用?请尝试使用dispatcher线程,该线程应该是UI线程或主线程。