2017-03-10 32 views
1

我已經聲明瞭一個變量並在控制檯應用程序中爲其分配了更新值。我已經完成了所有這些公開,併發送了WPF應用程序來引用控制檯應用程序。我在wpf應用程序中添加了對控制檯應用程序的使用引用,但是當我嘗試在WPF應用程序中調用該變量時,我什麼也得不到。代碼在這兩個應用程序中都是非常長和複雜的,但是如果發佈一些代碼會有所幫助,或者可能會有一部分代碼。試圖在控制檯應用程序中使用WPF應用程序中控制檯應用程序的變量

基本是在控制檯應用程序

string expectedwaittime = e.CmsData.Skill.ExpectedWaitTimeMedium.ToString(); 

,然後只要一切都是公開和引用是正確的,我應該不能只是在WPF應用程序

public string expectedwaittime = expectedwaittimemedium; 

I型我已經閱讀了關於如何做到這一點的其他文章,並且我已經完成了所有建議,似乎沒有任何工作。

我還在學習,這對我來說仍然是新的,所以請讓我知道如果這沒有意義。

編輯: 從控制檯應用程序添加功能:

public static void OnMessageReceived(object sender, MessageReceivedEventArgs e) 
     { 
      try 
      { 
       if (e == null) 
        return; 

       if (e.CmsData != null)   



       Console.WriteLine(e.CmsData.Skill.DirectAgentCallsInQueueInRing.ToString()); 
       Console.WriteLine(e.CmsData.Skill.InQueueInRing.ToString()); 
       Console.WriteLine(e.CmsData.Skill.SkillStatusColor.ToString()); 
       Console.WriteLine(e.CmsData.Skill.SkillStatusColorIsBlink.ToString()); 
       Console.WriteLine(e.CmsData.Skill.ExpectedWaitTimeMedium.ToString()); 

       string expectedwaittime = e.CmsData.Skill.ExpectedWaitTimeMedium.ToString(); 

       Console.WriteLine("your estimated wait time is " + expectedwaittime); 


       if (!String.IsNullOrEmpty(e.Message)) 
        Console.WriteLine(e.Message); 
      } 
      catch (Exception ex) 
      { 
       // logger.Error(" Exception " + ex); 
       // throw ex; 

      } 
     } 
+0

這可能是其更新變量您的控制檯代碼不會被調用。你能發表一個簡單的例子嗎? –

+0

所以我必須將整個函數調用到我當前使用的代碼中,而不僅僅是變量? – mcavanaugh418

+0

我在控制檯應用程序中添加了我一直在玩的代碼,以編寫我在控制檯應用程序中提供的信息。我能夠在控制檯應用程序中顯示數據,而不會出現問題。 – mcavanaugh418

回答

1

它,你可以從任何其他引用任何託管程序集是真實的。作爲託管程序集的控制檯程序可作爲WPF程序集的參考添加。但是,引用程序集不能訪問任何通常無法訪問的內容。

根據您發佈的代碼,你正在試圖獲得訪問,expectedwaittime變量,在方法OnMessageReceived()一個局部變量。除了聲明該變量的方法外,您不能通過名稱引用方法的局部變量。你甚至無法得到這個工作相同的大會,沒關係任何其他。

您必須遵循的另一個規則是您嘗試訪問的類成員必須是public,除非您從繼承聲明類的類訪問它,在這種情況下,protected就足夠了。再一次,即使在同一個程序集中,也是與任何代碼相同的規則。

您的具體示例開始時有點奇怪。但從表面上看,您希望從WPF程序集中訪問此變量的值,您可以做的一件事是使變量爲static字段。例如:

public static expectedwaittime; 

public static void OnMessageReceived(object sender, MessageReceivedEventArgs e) 
{ 
    try 
    { 
     if (e == null) 
      return; 

     if (e.CmsData != null)   

     /* ... */ 

     expectedwaittime = e.CmsData.Skill.ExpectedWaitTimeMedium.ToString(); 

     Console.WriteLine("your estimated wait time is " + expectedwaittime); 

     /* ... */ 
    } 
    catch { /* ... */ } 
} 

現在,但你必須遵循另一條規則是,當你指的是引用的程序集的類成員,你必須使用相同的名稱,在大會宣佈。您在問題中顯示的代碼看起來像是在WPF程序集中聲明瞭一個新變量,名稱爲expectedwaittime,然後嘗試從變量expectedwaittimemedium讀取。但那不行。控制檯程序中的變量名稱是expectedwaittime,就像您要分配給它的變量一樣。

考慮上述所有的,那麼如果你在你的控制檯程序static領域所做的變量,那麼你就可以訪問它想:

string expectedwaittime = MyConsoleClass.expectedwaittime; 

…其中MyConsoleClass是任何實際的佔位符在你的控制檯程序中聲明static字段的類的名稱(例如,在我的示例中,用正確的類名替換MyConsoleClass)。

現在,所有的說…要讀取一個static

存儲數據從其他組件來看待問題,像這種好辦法。如果你想從WPF程序中使用你的控制檯程序,你應該設計一個適合這兩者進行通信的API。理想情況下,你應該建立在控制檯程序,該程序WPF可以訂閱一個MessageReceived事件,並傳遞expectedwaittime值作爲EventArgs子類事件的一部分。

但是,至少應該隱藏static字段,使其成爲private,並使用public屬性返回值。而且它很可能也是一個好主意,在實際接收來自ExpectedWaitTimeMedium.ToString()表達式的值OnMessageReceived()方法單獨的本地變量,並使用該方法內變量,使用static爲宗旨將該值暴露給引用程序集。

但所有這一切是一個相當有點超出你原來的問題。我只是提到它,希望在你解決這個問題時能夠接受這個建議。這個答案滿足您即時的問題,如果你需要額外的幫助,你應該試圖在這裏照做,如果你仍然遇到了問題,後一個新問題,以良好的Minimal, Complete, and Verifiable code example清楚地表明你已經嘗試了什麼,並準確解釋給你帶來麻煩的是什麼。

相關問題