2015-09-01 92 views
2

我真的需要你的幫助,並弄清楚。從另一個項目C調用類#

我的項目:

AccessProjectMap -- MainClass.cs -- ErrorLog.cs (public) ThreadProjectMap -- StartThread.cs

我想打StartThread我的默認項目的項目啓動時。現在我需要ThreadProjectMap中的ErrorLog.cs文件。我做了一個參考,我實際上可以說ErrorLog log = new ErrorLog();這也可以工作。當我嘗試使用MainClass.cs中的ErrorLog時,它也可以工作。

但是我不能使用log裏面的main或者DoThreading函數。

class StartThread { 

    static string threadRefresh = ConfigurationManager.AppSettings.Get("refreshTime").ToString(); 

    Access ac = new Access(); 
    ErrorLog log = new ErrorLog(); 

    static void Main(String[] args) { 
     log.LogMessageToFile("== Start Main() =="); 
     Thread t = new Thread(new ThreadStart(DoThreading)); 
     t.Start(); 
     Console.Read(); 
    } 

    static void DoThreading() { 
     int refresh = 1; 

     while (true) { 

      Console.WriteLine("Test"); 
      log.LogMessageToFile("== Test - inside Thread =="); 

      Thread.Sleep(1000); 

     } 

    } 
} 

回答

3

的問題是,因爲不同的項目/命名空間不,不是你想在靜態方法訪問實例成員。

讓你的log字段static它應該編譯好。

static ErrorLog log = new ErrorLog(); //Here, make it static 

static void Main(String[] args) { 
    log.LogMessageToFile("== Start Main() =="); 
    Thread t = new Thread(new ThreadStart(DoThreading)); 
    t.Start(); 
    Console.Read(); 
} 
+0

這兩個圖都具有相同的名稱空間。 當我做日誌靜態我得到TypeInitializationException? – daniel

+0

'TypeInitializationException'通常意味着您的類'ErrorLog'中有一些'static'字段沒有正確初始化。檢查代碼,設置斷點並查看是否可以弄清楚。如果有任何內容,請看內部異常,這可能會給你一個更好的主意 – Habib

+0

非常感謝我再次將我推向正確的方向! :)問題是它無法處理我的app.config文件 – daniel

2

你在這條線創建錯誤日誌的實例:

ErrorLog log = new ErrorLog(); 

是一個實例變量。 MainDoThreading方法是靜態的。

你有兩個選擇:要麼使靜態錯誤日誌,以及像這樣:

static ErrorLog log = new ErrorLog(); 

或者,只是對其進行實例化的靜態方法裏面。