2013-02-12 35 views
0

這裏是我沒有想出來的: 我想讓我的主程序監視另一個DLL(線程)的變量;該變量是一個bool標誌,根據外部硬件觸發器的不同,該標誌在true和false之間變化。這是我做的,但顯然它沒有響應變量的變化:如何監視從另一個DLL變量的變化?

public bool IsTriggerOn 
{ 
    get { return TriggerWatcherDll.IsTriggerOn; } 
    set 
     { 
      _isTriggerOn= TriggerWatcherDll.IsTriggerOn = value; 
      if (_isTriggerOn == true) 
      { 
        System.Windows.Forms.MessageBox.Show("Trigger is ON!"); 
      } 
     } 
} 

我到底該怎麼做?謝謝。

我使用的是C#+ WPF,上面的代碼來自xaml後面的C#代碼;

+0

爲此定義一個事件。必須有一種方法來注意你的程序變化。然後你可以發起一個事件。你在準備什麼? – 2013-02-12 16:50:10

回答

1

它看起來像你可能會輕微混淆你自己。根據您提供的代碼示例,TriggerWatcherDll類在不同的程序集中似乎不相關。實際上,它看起來像是訪問IsTriggerOn作爲類的靜態屬性(基於所使用的命名),所以不同的線程也與檢測變化無關(儘管競爭條件是可能的)。

從你所描述的東西,這聽起來像你只需要在你的「其他」 DLL的事件:

class TriggerWatcherDll 
{ 
    public static event EventHandler TriggerChanged; 

    private static bool _trigger = false; 
    public static bool IsTriggerOn 
    { 
     get { return _trigger; } 
     set 
     { 
      if (_trigger != value) 
      { 
       _trigger = value; 
       if (TriggerChanged != null) 
        TriggerChanged.Invoke(null, new EventArgs()); 
      } 
     } 
    } 
} 

然後,只需訂閱事件在主DLL:

class OtherDll 
{ 
    public OtherDll() 
    { 
     TriggerWatcherDll.TriggerChanged += TriggerWatcherDll_TriggerChanged; 
    } 

    void TriggerWatcherDll_TriggerChanged(object sender, EventArgs e) 
    { 
     if (TriggerWatcherDll.IsTriggerOn) 
      System.Windows.Forms.MessageBox.Show("Trigger is ON!"); 
    } 
} 

雖然你可能想重新考慮你對靜態的使用,但我沒有涉及到線程問題。

+0

是的,我明白了。我只是在被調用的DLL中添加了事件處理程序,然後我在主線程中添加了事件響應程序/函數,並且ti工作!非常感謝。答案接受:) – 2013-02-12 21:22:30

+0

1)你應該儘量避免使用靜態變量2)你爲什麼要使用Invoke? 3)你應該在事件參數中傳遞觸發值以避免「線程問題」 – 2013-02-14 03:28:09

相關問題