Bazı programcıların bazı donanımları denetlemesi için kullanacak özel bir .net donanım çerçevesi oluşturuyorum. Donanım çerçevemize ulaşmak için DLL'imize bir referans ekleyecektir. Birden çok uygulamadan (süreçler) erişilebilecek bir paylaşılan sınıfa ihtiyacım var.Bir DLL içindeki bir Singleton Sınıfı işlemler arasında paylaşılabilir mi?
Tekil kalıbı ihtiyacım olan şey gibi görünüyor, ancak yalnızca işleminiz içinde birden fazla iş parçacığı için çalışıyor. Tamamen yanlış olabilirdim ama burada şu an sahip olduğum C# kodunun bir örneği var. Tasarımın yanlış olduğunu hissetmemde yardımcı olamam. Daha spesifik bilgileri paylaşabilmeyi isterdim ama yapamam.
- Müşteri uygulaması üzerinde hiçbir kontrolüm olmayacağını vurgulamalıyım. Çözüm, çerçevenin (DLL) içinde yer almalıdır.
Çerçevesi: (Paylaşılan 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;
}
}
}
Testi Uygulaması:
: (sonunda müşteri uygulaması)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); } }
ilk başlatılan uygulama bir çıkış verir
Kaynağı yakalamak için enter'a basın!
1: 2009/06/24 08:27:34
3: 2009/06/24 08:27:34
basın sürecini kapatmak için girmek!
basın kaynağını yakalamak için girin:
ikinci uygulama bir çıkış verir!
9: 2009/06/24 08:27:35
10: 2009/06/24 08:27:35
basın sürecini kapatmak için girmek!
Sonuç:
ben hem uygulama sınıfının ilk örnekleme zamanı aynı dizesini döndürür görmek istiyorum.
İşlemdeki birden çok iş parçacığı için tekli işlemlerini görebileceğiniz gibi çapraz işlemleri göremiyorsunuz. Belki bu yapılamaz çünkü herhangi bir çözüm bulamıyorum.
Çözerim vurgulamak gerekir ...
http://www.albahari.com/threading/
Özellikle çapraz süreç senkronizasyonu burada inşa bkz parçacığı üzerinde çevrimiçi ücretsiz e-kitap okumak Müşteri uygulaması üzerinde kontrol sahibi olmayın. Çözüm, çerçevenin (DLL) içinde yer almalıdır. –