私は他のプログラマーがハードウェアを制御するために使用する.netハードウェアフレームワークを作成しています。彼らは私たちのハードウェアフレームワークに到達するためにDLLへの参照を追加します。私は複数のアプリケーション(プロセス)からアクセスされる共有クラスが必要です。DLL内のシングルトンクラスをプロセス間で共有できますか?
シングルトンパターンが必要なようですが、プロセス内の複数のスレッドに対してのみ機能します。私は完全に間違っている可能性がありますが、私は現在持っているC#コードの例です。私はデザインが間違っていると感じるのを助けることができません。もっと具体的な情報を共有したいと思っていますが、できません。
- 私は顧客アプリケーションを制御できないことを強調する必要があります。ソリューションは、フレームワーク(DLL)自体の内部に格納されている必要があります。
フレームワーク:(共有DLL)
public class Resources
{
static readonly Resources m_instance = new Resources();
public string Data;
private Resources()
{
Data = DateTime.Now.ToString();
}
public static Resources Instance
{
get
{
return m_instance;
}
}
}
テストアプリケーション:
:(最終的には顧客APP)class Program { static void Main(string[] args) { Console.WriteLine("Press enter to capture the resource!"); Console.ReadLine(); var resources = Resources.Instance; Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data); BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += WorkerDoWork; worker.RunWorkerAsync(); while (worker.IsBusy) { Thread.Sleep(100); } Console.WriteLine("Press enter to close the process!"); Console.ReadLine(); } static void WorkerDoWork(object sender, DoWorkEventArgs e) { var resources = Resources.Instance; Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data); } }
最初の起動されたアプリケーションは、出力を与えます
Enterキーを押してリソースをキャプチャします。
1:2009年6月24日8時27分34秒AM
3:2009年6月24日8時27分34秒AM
を押して、プロセスを閉じるように入力してください!
押して、リソースをキャプチャするために入力します。
第二のアプリケーションは、の出力を提供します!
9:2009年6月24日8時27分35秒AM
10:2009年6月24日8時27分35秒AM
を押して、プロセスを閉じるように入力してください!
結論:
私は両方のアプリケーションが、クラスの最初のインスタンス化の時の同じ文字列を返してほしいです。
シングルトンはプロセス内の複数のスレッドで動作しますが、プロセス間では動作しません。たぶん、これはできません私は任意の解決策を見つけるように見えることはできません。
私は私がすることを強調しなければならない...
http://www.albahari.com/threading/
は特別にクロスプロセスの同期はこちらを構築ご覧スレッド上でオンライン無料電子ブックを読みます顧客アプリケーションを制御できません。ソリューションは、フレームワーク(DLL)自体の内部に格納されている必要があります。 –