他のプログラマーが一部のハードウェアを制御するために使用するカスタム .net ハードウェア フレームワークを作成しています。ハードウェア フレームワークにアクセスするために、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;
}
}
}
テスト アプリケーション: (最終的に顧客アプリ)
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 秒
3: 2009 年 6 月 24 日午前 8:27:34
Enter キーを押してプロセスを閉じます。
2 番目のアプリケーションでは、次の出力が得られます。
Enter キーを押してリソースを取得してください!
9: 2009 年 6 月 24 日午前 8:27:35
10: 2009 年 6 月 24 日午前 8:27:35
Enter キーを押してプロセスを閉じます。
結論:
クラスが最初にインスタンス化された時点で、両方のアプリケーションが同じ文字列を返すようにしたいと考えています。
ご覧のとおり、シングルトンはプロセス内の複数のスレッドでは機能しますが、クロスプロセスでは機能しません。解決策が見つからないため、これを実行できない可能性があります。