我想在两个不同的项目之间使用共享变量,我想每次在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文件中附加了上面的类,并引用了两个不同的项目&然后尝试在一个项目中更新价值&期望在第二个项目中获得更新价值。但它没有提供更新的价值。
答案 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) - >添加为链接)?