有没有办法从另一个工作线程获取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以获取当前线程。
答案 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
,并且应该能够使用 Post
或 Send
将工作传递给主线程。
或者,如果这不起作用(环境同步上下文是 null
):将任何控件/表单传递给您的工作人员;然后它可以调用 Invoke
/BeginInvoke
将工作传递给主线程。
另一种方法是通过调用 Invoke
/BeginInvoke
来公开您调用的事件,让 UI 侦听该事件,并让 UI 处理切换回主线程本身(在处理事件时)。
答案 3 :(得分:-1)
找到它的方法是:
var MainThread = (from x in MyProcess.Threads.Cast<ProcessThread>() orderby x.StartTime select x).First();