2

有没有办法从另一个工作线程获取对 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

4 回答 4

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
    }

这应该工作!

于 2013-02-05T13:10:27.580 回答
1

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

于 2013-02-05T13:11:52.130 回答
0

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

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

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


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

于 2020-12-18T18:56:12.693 回答
-1

A 找到它的方法是:

var MainThread = (from x in MyProcess.Threads.Cast<ProcessThread>() orderby x.StartTime select x).First();
于 2020-12-16T22:57:59.490 回答