-3

2 つの異なるプロジェクト間で共有変数を使用したいのですが、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ファイルに添付し、2つの異なるプロジェクトで参照してから、1つのプロジェクトで値を更新しようとし、2番目のプロジェクトで更新された値を取得することを期待しています。しかし、それは更新された価値を提供しません。

4

4 に答える 4

3

MS のドキュメントには、DLL について次のように記載されています。

いくつかの回避策を提供するこれを見てください:http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.80).aspx

ところで、ネットワーク通信を使用してこの価値を共有します。

于 2013-03-02T12:25:59.807 に答える
3

通信する必要がある 2 つのプロセス (2 つの .exe ファイルなど) がある場合、それはプロセス間通信と呼ばれます。これを処理するには何百万もの異なる方法があるため、簡単に説明する方法はありません。

  • ファイルに書き込み、読み取ることができます。
  • プロセスをネットワークで接続できます。
  • 共通データベースへの書き込みと読み取りが可能です。
  • メッセージ キューを使用できます。
  • 名前付きパイプを使用できます。
  • そして、おそらく私が見逃した別の数十の方法...

それらを再調査し、問題に最も適した解決策を見つける必要があります。

于 2013-03-02T12:45:42.393 に答える
0

同じプログラム内の 2 つのプロジェクトで static メンバーにアクセスしようとしていますよね? 2 つの別々のプログラムではありません。

もしそうなら、あなたが持っている誤解は、値型と参照型の間にあると思います。両方のプロジェクトから共有変数を更新できますが、それらの値は反映されません。使用している 2 つのクラスではなく、1 つのクラスを使用してデモを行います。

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

tstatic メンバーを変更したときにの値が更新されなかったことに注意してください。これ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 に答える