-3

我想在两个不同的项目之间使用共享变量,并且每次都想在 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

4 回答 4

3

如果您有两个需要通信的进程(如两个 .exe 文件),则称为进程间通信。真的没有简单的方法来解释,因为有上百万种不同的方法来处理这个问题。

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

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

于 2013-03-02T12:45:42.393 回答
3

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

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

顺便说一句,我会使用网络通信来分享这个价值观。

于 2013-03-02T12:25:59.807 回答
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"
于 2013-03-02T12:25:43.583 回答
-1

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

于 2013-03-02T12:18:51.323 回答