2012-12-12 70 views
0

我正在挖掘多線程,發現一些很好的教程,但我還有一些問題。如何在第二個線程上運行整個類?

我想如何運行一個函數異步,(見這個tutorial)有四個例子來實現這一點。

但是在我開發的應用程序中,我想在一個單獨的線程中運行整個類。我在尋找這樣的事情:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace multithread_test 
{ 
    class Program 
    { 
     Program() 
     { } 
     RunInBackground RIB; 

     void StartBackgroundWorker() 
     { 
      // how do I get RIB to run in the background? 
      RIB = new RunInBackground(); 
     } 

     //somefunction to listen to the CallEventToUpdateGUI 
    } 


    //This class should run in a different thread than class Program 
    class RunInBackground 
    { 
     void RunInBackground() 
     { } 

     void Function1() 
     { 
      //somefunction 
     } 

     void Function2() 
     { 
      // somefunction 
     } 

     void Function3() 
     { 
      Function1(); 
     } 

     void CallEventToUpdateGUI() 
     { 
      //call a event to update gui 
     } 

    } 
+1

類不在線程中運行。方法呢。方法與其調用者(通常)在相同的線程上運行。如果'RIB'在另一個線程上「運行」,然後從'Program'內調用'RIB.Function1()',你會發生什麼? –

+0

我希望這個函數能夠在另一個線程上運行,但可能這是愚蠢的想像那樣...... – 2pietjuh2

回答

2

主題是關於代碼的執行,而不是關於它definiton。你不可以做這個。 你可以做的只是運行 ohter線程上的代碼。

你也可以實例化一個類在另一個線程上,但它的方式不是它的定義。

+0

好吧,所以如果我在一個單獨的線程中調用一個函數,並從該函數調用其他函數,這些功能都運行在同一個獨立的線程上? – 2pietjuh2

+0

@ 2pietjuh2正確 – Dutts

+0

@ 2pietjuh2:是的。 – Tigran

相關問題