2013-07-10 23 views
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(); 
    } 
} 

}

以上異常代碼的結果。我已經看到很多關於重新啓動線程的討論。在我的情況下,我想在同一個線程上一個接一個地執行多個操作。對於我來說,我正在尋找解決方案來在同一個線程上運行不同對象的不同方法。所有這些對象都是實現與上述代碼相同的接口的類。請建議我最好的方式來執行此操作。換句話說,如果一個方法完成,那麼同一個線程應該啓動另一個對象的方法。這可能嗎?

回答

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()); 
+0

這個的唯一限制是你需要知道預先執行的方法(對於我來說,不清楚這是否是OP所要求的) –

+0

這不起作用,因爲我不知道所有的方法我會有什麼調用可用的線程對象。爲每個節點可視化樹狀結構和線程。 –

+0

@NutanJayavant,用另一個選項更新答案 - 使用Dispatcher類。 – alex

0

您可以實施「生產者/消費者」模式(例如,如果您可以使用.Net 4,則使用ConcurrentQueue和BlockingCollection)。

這樣你有一個工作線程將從你的主線程提供工作。這是一種非常靈活的解決方案。

相關問題