c#多个事件的相同事件处理程序

时间:2012-03-06 09:08:54

标签: c#-4.0 event-handling

我对c#和OOP很新,非常感谢你对此的帮助。现在我正在开发一个供我们使用的API供应商平台。我的代码中有几个事件处理程序调用相同的方法。在这个方法中,我有一些关键的全局变量。

这里的问题是我需要通过实现互斥等来使这个函数线程安全吗?我明白,如果我有多个线程调用相同的功能,我必须这样做。我不确定事件。

感谢阅读。

2 个答案:

答案 0 :(得分:1)

我假设您的“供应商平台”是您在项目中引用的.Net程序集。如果不是这种情况(例如,它是您使用的Web服务),则此答案将不准确,您应该更新您的问题,并提供有关您案例的更多信息。

实际上取决于。

  • 如果供应商平台是多线程的,那么您的一些事件处理程序可以在多个线程中同时调用,因为您的第三方lib可能会从不同的线程触发事件。然后,您必须保护对方法的访问权限。

  • 如果第三方lib是单线程的,则保证所有事件都将在同一个线程中触发,因此所有事件处理程序将一个接一个地调用,而您不需要保护您的方法免受并发访问。

答案 1 :(得分:0)

简而言之,如果您引用“全局变量”,则需要使用锁(lock)或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(); }
}