2013-05-17 55 views
0

我有一個主類,啓動一個新的線程,像這樣的另一個類的一個實例:內部類類屬性在單獨的線程

我根據這本參考MSDN文章,Class2.P1不應爲null 。 鏈接:http://msdn.microsoft.com/en-us/library/system.threading.threadstart.aspx

我是否缺少明顯的東西?

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

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      new Host().DoWork(); 
     } 
    } 
    public class Host { 

     Class2Parent c = new Class2(); 
     Thread t; 
     public void DoWork() { 
     c.P1 = new Class3(); 
     t = new Thread(c.Start); 
     t.Start(); 
     } 
    } 

    public class Class2Parent { 
     public Class3 P1 = null; 
     public virtual void Start() {} 
    } 

    public class Class2 : Class2Parent { 
     public Class3 P1 = null;   
     public override void Start() { 
     Console.WriteLine(P1 == null); // this is always true 
     } 
    } 

    public class Class3 
    {} 
} 
+0

我不知道,如果你失去了一些東西,但你的主機類缺少方法 –

+0

什麼是你的實際代碼?你根本就沒有開始線程。 – JeffRSon

+0

你還沒有開始線程 –

回答

0

你可以嘗試創建使用計時器變量就這樣一個新的線程:

private Timer m_RequestTimer; 

public void Begin() 
{ 
      // Timer check 
      if (m_RequestTimer != null) 
      { 
       m_RequestTimer.Change(Timeout.Infinite, Timeout.Infinite); 
       m_RequestTimer.Dispose(); 
       m_RequestTimer = null; 
      } 
m_RequestTimer = new System.Threading.Timer(obj => { c.Start(); }, null, 250, System.Threading.Timeout.Infinite); 
     } 
} 

其中m_RequestTimer是類主機的屬性,開始主機的方法。

我希望它會幫助你=)

+0

這與這個問題有什麼關係? – JeffRSon

+0

在他原來的帖子中,線程並未啓動,所以我向他展示了一種啓動線程的方法。 –