如何在两个c#项目之间共享变量

时间:2013-03-02 12:12:45

标签: c#

我想在两个不同的项目之间使用共享变量,我想每次在c#中更新该变量? 我使用dll文件来共享变量,但在更新变量时它没有用。请帮忙。

public static class Signals
{
public static bool Admin_Logged_In;
public static bool get_Admin_Flag()
{
    return Admin_Logged_In;
}
public static bool get_Busy_Flag()
{
    return Back_End_Busy;
}
}

我在DLL文件中附加了上面的类,并引用了两个不同的项目&然后尝试在一个项目中更新价值&期望在第二个项目中获得更新价值。但它没有提供更新的价值。

4 个答案:

答案 0 :(得分:3)

MS文档说明了DLL:“默认情况下,使用DLL的每个进程都有自己的所有DLL全局和静态变量的实例。”

看看这个给出一些解决方法:http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.80).aspx

BTw,我会使用网络通信分享这些值。

答案 1 :(得分:3)

如果您有两个需要通信的进程(如两个.exe文件),则称为inter process communication。确实没有简单的解释方法,因为有一百万种不同的方法可以解决这个问题。

  • 您可以写入文件并阅读它们。
  • 您可以通过网络连接流程。
  • 您可以编写和读取公共数据库。
  • 您可以使用消息队列。
  • 您可以使用命名管道。
  • 可能还有另外十几种我错过的方式......

您需要对它们进行重新研究,找到最适合您问题的解决方案。

答案 2 :(得分:0)

您正试图通过同一程序中的两个项目访问静态成员吗​​?不是两个单独的程序。

如果是这样,我认为您所遇到的误解是在值类型和引用类型之间。您可以从两个项目更新共享变量,但这些值不会传播。我将使用一个单独的课来演示,而不是你正在使用的两个。

static class Test
{
    public static bool logged_in;
}


Test.logged_in = true;
var t = Test.logged_in;
Console.WriteLine(l); // prints true
Test.logged_in = false;
var f = Test.logged_in;
Console.WriteLine(f); // prints false
Console.WriteLine(t); // prints true

注意更改静态成员时t的值是如何更新的?那是因为bool是值类型,而不是引用类型。因此,当您询问该值时,您会收到该值的副本,而不是对该变量的引用。

如果静态成员是引用类型,您可以观察到不同的行为:

static class Test
{
    public static string logged_in;
}


Test.logged_in = "true";
var t = Test.logged_in;
Console.WriteLine(l); // prints "true"
Test.logged_in = "false";
var f = Test.logged_in;
Console.WriteLine(f); // prints "false"
Console.WriteLine(t); // prints "false"

答案 3 :(得分:-1)

链接文件怎么样(点击项目 - >添加 - >现有项目 - >(选择you.cs) - >添加为链接)?