尝试在同一解决方案中使用WPF应用程序中的Console应用程序中的变量

时间:2017-03-10 02:46:44

标签: c# wpf console-application

我已经声明了一个变量,并在控制台应用程序中为其分配了更新值。我已将所有这些公开,并发送WPF应用程序以引用控制台应用程序。我在wpf应用程序中添加了对控制台应用程序的使用引用,但是当我尝试在WPF应用程序中调用该变量时,我什么也得不到。这些代码在两个应用程序中都非常冗长和复杂,但如果发布一些代码会有所帮助,或者可能是其中的一部分。

基本是在控制台应用程序中

read = pd.read_csv(url, delimiter = '\t', names = list("abcdefghi"))

read.head()

然后只要一切都是公开的并且引用是正确的,我就不能只输入WPF应用程序

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

我已经在这里阅读了有关如何做到这一点的其他文章,我已经完成了所有建议,似乎没有任何工作。

我还在学习,这对我来说还是新手,所以如果这没有意义,请告诉我。

编辑: 从控制台应用程序添加功能:

public string expectedwaittime = expectedwaittimemedium;

1 个答案:

答案 0 :(得分: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班级名称)。

现在,所有这一切......

将数据存储在MessageReceived字段中以便从其他程序集中读取是一种非常糟糕的方法来解决这样的问题。如果您想要使用WPF程序中的控制台程序,您应该设计一个适当的API来进行通信。理想情况下,您应该在控制台程序中创建一个expectedwaittime事件,WPF程序可以订阅该事件,并将EventArgs值作为事件的static子类的一部分传递。< / p>

但至少,您应该隐藏private字段,使其成为public,并使用OnMessageReceived()属性返回值。在ExpectedWaitTimeMedium.ToString()方法中有一个单独的局部变量,实际上从static表达式接收值,并使用 ,这也是一个好主意。方法内部的变量,仅使用public static void insertionSort (Comparable[] list) { for (int index = 1; index < list.length; index++) { Comparable key = list[index]; int position = index; while (position > 0 && key.compareTo(list[position-1]) < 0) { list[position] = list[position-1]; position--; } list[position] = key; } } 字段 ,以便将值公开给引用程序集。

但所有这些都远远超出了原来的问题。我只是提到它,希望你在解决这个问题时能够接受这个建议。这个答案解决了您的直接问题,如果您需要其他帮助,您应该尝试按照这里的建议,如果您仍然遇到问题,请发布一个新问题,其中包含一个好的Minimal, Complete, and Verifiable code example,清楚地显示您的问题。已经尝试过,并准确地解释了给你带来麻烦的事情。