2

我有一种情况,我希望同一个线程执行多个操作。参考下面的代码:

namespace ConsoleApplication1
{
public interface ISample
{
    void show();
}
class A : ISample
{
    public void show()
    {
        Console.WriteLine("Inside A");

    }
}

class B : ISample
{
    public void show()
    {
        Console.WriteLine("Inside B");

    }
}

class Program
{
    static void Main(string[] args)
    {
        ISample aObj = new A();
        System.Threading.ThreadStart ts1 = new System.Threading.ThreadStart(aObj.show);
        System.Threading.Thread t1 = new System.Threading.Thread(ts1);
        t1.Start();
        t1.Join();
        aObj = new B();
        t1.Start();
        Console.ReadLine();
    }
}

}

上面的代码导致异常。我已经看到很多关于重新启动线程的讨论。就我而言,我想在同一个线程上一个接一个地执行多个操作。对我来说,我正在寻找在同一线程上从不同对象运行不同方法的解决方案。所有这些对象都是实现与上述代码相同接口的类。请建议我执行此操作的最佳方法。换句话说,如果一个方法是完整的,那么同一个线程应该启动另一个对象的方法。这可能吗?

4

2 回答 2

2

您可以尝试将所有需要的方法分组到一个匿名委托中:

 Thread t1 = new Thread(
          () => {
               aObj.show();
               bObj.doStuff();
              });
 t1.Start();

更新:如果事先不知道方法列表,您可以使用Dispatcher类在特定线程上运行您的方法:

 Thread t1 = new Thread(Dispatcher.CurrentDispatcher.Run);
 t1.Start();     
 Dispatcher.FromThread(t1).Invoke(()=>a.aObj.show());
于 2013-07-10T07:36:09.797 回答
0

您可以实现“生产者/消费者”模式(例如,如果可以使用 .Net 4,则使用 ConcurrentQueue 和 BlockingCollection)。

这样你就有了一个工作线程,它将从你的主线程中获取作业。对于您的方案,这是一个非常灵活的解决方案。

于 2013-07-10T07:44:04.203 回答