如何访问主线程

时间:2013-02-05 13:01:01

标签: 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
        //do some work
    }

更新

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

4 个答案:

答案 0 :(得分:1)

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
    }

这应该有用!!!

答案 1 :(得分:1)

好吧,你总是可以使用ParameterizedThreadStart来启动一个线程并向它发送参数,因为它是一个对象,你可以传递一个对调用线程的引用。

答案 2 :(得分:0)

了解 Thread 实例无济于事,因为这不允许您做任何有用的事情。您大概想要的是能够让主线程做某事(例如:更新自身)。

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

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


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

答案 3 :(得分:-1)

找到它的方法是:

var MainThread = (from x in MyProcess.Threads.Cast<ProcessThread>() orderby x.StartTime select x).First();