簡體   English   中英

如何獲取從另一個實例聲明的靜態屬性。 C#

[英]How to get a static property declared from another instance. c#

我的C#應用​​程序已執行,並設置了一個靜態變量“ _user”。 后記另一個應用程序在相同的過程下執行,並且它必須讀取該變量。 我無法獲得預期的結果。

  • 應用程序1:設置_user變量:

     public class Program { public static void Main(string[] args) { LoginDialog login = new LoginDialog(); login.RunDialog(); } } 
  • Application調用的類,它設置變量_User

     public class LoginDialog { private static string _user; public void RunDialog() { _user = "Peter"; } public static string User { get { return _user; } } } 
  • 應用程序2:獲取聲明的靜態變量:

     public class Program { public static void Main(string[] args) { string s = LoginDialog.User; } } 

這是不可能的,因為每個進程都有自己的地址空間,因此也有自己的LoginDialog.User實例。 您需要使用某種類型的進程間通信,例如共享內存或命名管道。

順便說一句:從另一個啟動一個應用程序不會導致一個進程執行兩個應用程序。 每個應用程序都有其自己的過程。

靜態數據的壽命與應用程序域 (AppDomain)一樣長。 卸載AppDomain時,將釋放其內存,並且該內存中存儲的所有數據都會丟失。

如果在Main方法中首先調用LoginDialog.RunDialog() ,則應獲得預期的結果。

如果確實需要登錄名在單獨的AppDomain中運行,則需要將一些數據持久保存到磁盤上的某個知名位置,或者使用其他進程間通信方法

我懷疑托管您的應用程序的任何對象都在為每個應用程序創建一個新的AppDomain 這將它們彼此隔離,就好像它們處於不同的過程中一樣。

我建議您將結果保存到磁盤,而不要嘗試使用靜態變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM