2012-03-06 139 views
0

我對c#和OOP一般都很陌生,非常感謝你對此的幫助。現在我正在開發供應商平臺,爲我們提供一套API。我的代碼中有幾個事件處理程序調用了相同的方法。在這種方法中,我有一些關鍵的全局變量。c#多個事件的相同事件處理程序

這裏的問題是我需要通過實現互斥鎖等來使這個函數線程安全嗎?我明白,如果我有幾個線程調用相同的功能,我必須這樣做。雖然我不確定事件。

感謝您的閱讀。

回答

1

我假設您的「供應商平臺」是您在項目中引用的.Net程序集。如果不是這種情況(例如它是您使用的Web服務),那麼這個答案將不準確,您應該更新您的問題並提供更多有關您的案例的信息。

它實際上取決於。

  • 如果供應商平臺是多線程的,那麼你的一些事件處理程序可以同時在多個線程調用作爲第三方的lib可能會觸發來自不同線程的事件。然後你必須保護對你方法的訪問。

  • 如果第三方庫是單線程的,那麼它保證所有的事件都會在同一個線程中被觸發,因此所有的事件處理程序都會被一個接一個地調用,而且你不需要保護你的併發訪問方法。

0

總之,如果你正在引用「全局變量」你需要保護與鎖(鎖)或ReaderWriterLockShim對它們的訪問,如

private static Dictionary<string, PerformanceCounter> _counters; 
private static ReaderWriterLock rwl = new ReaderWriterLock(); 

public static void SetCounterValue(object aName, long aValue) 
{ 
    string key = aName.ToString(); 
    try 
    { 
     rwl.AcquireWriterLock(Timeout.Infinite); 
     PerformanceCounter counter = _counters[key]; 
     counter.RawValue = aValue; 
    } 
    finally { rwl.ReleaseWriterLock(); } 
}