2012-11-20 62 views
1

我有一個winforms應用程序應該能夠與自定義設備進行通信。我有一個主窗口,其中有一個「斷開」按鈕。我有一個處理日誌的用戶控件,和一個處理所有通信的類(SerialCom)。不同類別的捕捉按鈕單擊事件

當我加載用戶控件時,我還在SerialCom類中設置com端口。此類接收數據,並通過INotifyPropertyChanged將其發送到用戶控件,有關詳細信息,請參見this question

我想從MainForm訪問類SerialCom,而不必使用SerialCom類的new。但是SerialCom類首先在用戶控件上創建。 (所以,如果我從MainForm的SerialCom類,我的串行端口不會打開,所以我不能關閉它。)

任何提示如何從類B和C訪問類A,而不必新類再來一次?我正在考慮在表格之間傳遞事件,這是最好的選擇嗎?

+2

這裏有很多選擇:你可以從A到B傳遞到對象的引用,你可以有一個「節目」級可以通過應用程序中的任何表單訪問。你可以有一個事件委託。你可以使用觀察者/可觀察結構。世界在你腳下。 :) – Bazzz

+0

問題更新,使更清晰 – 2pietjuh2

+1

它會幫助使'SerialCom'單身? –

回答

1

把你的SerialCom類變成一個單身人士。這樣你就有了許多類可以訪問的實例。但請確保使此線程安全!

請參閱this for making thread safe singletons

+0

謝謝,我確實使用了Microsoft的線程安全示例。它按預期工作:) – 2pietjuh2

1

也許你正在尋找一個單身人士。基本上,一個對象只允許一個實例被初始化,並且提供了一個機制(通過靜態方法/屬性)從任何地方訪問這個實例。

下面是一個簡單的實現,我發現在以下鏈接http://msdn.microsoft.com/en-us/library/ff650316.aspx

using System; 

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 
+0

這不是線程安全的! –

+0

它甚至在文章中提到。 = D –

+0

啊,我的不好。道歉 –