调度员如何处理线程?

时间:2009-09-24 10:48:03

标签: c# silverlight multithreading

我们有一个使用调度员的silverlight应用程序,我将不胜感激任何帮助解释以下代码的作用? (不幸的是编写代码的开发人员离开了。)

所以我们拥有以下内容:

public class ABC
{
    private Dispatcher dispatcher;
    private Thread threadRunner;

    public void ABC()
    {
       threadRunner= new Thread(ThreadRunnerMethod)
                         {
                           IsBackground = true, 
                           ApartmentState = ApartmentState.STA
                         };
       threadRunner.Start();
    }

    private static void ThreadRunnerMethod()
    {
       Dispatcher.Run();
    }


    public void MainMethod()
    {
       dispatcher = Dispatcher.FromThread(threadRunner);
       dispatcher.Invoke(new Action(() => 
                                     // "DO SOME WORK WITH A COM OBJECT"
                                      ));

    }
}

我有一些线程的基本经验,但我不知道这一切是如何工作的?

JD

1 个答案:

答案 0 :(得分:3)

它相当于Windows窗体中的Control.Invoke,基本上 - 它只是被分成了自己的对象。

据我了解,Dispatcher.Run基本上会启动一个事件循环,您可以使用Dispatcher.Invoke对该事件循环进行调整。 Dispatcher.FromThread找到负责给定线程的Dispatcher对象 - 所以在这种情况下,它会找到在新线程中运行的事件循环。

因此,在您的代码中,使用lambda表达式创建的委托将在新创建的线程中执行。