我正在創建一個將被其他程序員用來控制某些硬件的自定義.net硬件框架。他們會添加一個對我們的DLL的引用,以達到我們的硬件框架。我需要一個可以從多個應用程序(進程)訪問的共享類。DLL中的Singleton類可以跨進程共享嗎?
單例模式似乎是我需要的,但它只適用於您的過程中的多個線程。我可能完全錯誤,但這裏是我目前擁有的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);
}
}
第一個啓動的應用程序給出的輸出:
按回車即可捕獲資源!
1:2009/6/24上午8時27分34秒
3:2009/6/24上午8時27分34秒
按回車鍵關閉該進程!
第二個應用程序提供的輸出:
按回車鍵奪取資源!
9:2009/6/24上午08點27分35秒
10:2009/6/24上午08點27分35秒
按回車鍵關閉該進程!
結論:
我想看到這兩個應用程序返回的類的實例第一次的時間相同的字符串。
正如你所看到的單身人士在進程內的多線程工作,但不是跨進程。也許這不能完成,因爲我似乎無法找到任何解決方案。
我必須強調,我會無法控制客戶應用程序。解決方案必須包含在框架(DLL)本身內。 – 2009-06-24 17:09:14