2017-03-10 38 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清楚地表明你已经尝试了什么,并准确解释给你带来麻烦的是什么。

相关问题