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



我对c#和OOP很陌生,非常感谢您在这方面的帮助。现在我正在一个供应商平台上工作,该平台提供了一组API供我们使用。我的代码中有几个事件处理程序调用相同的方法。在这个方法中,我有一些关键的全局变量。

这里的问题是,我需要通过实现互斥等来确保这个函数线程的安全吗。。?我知道若我有多个线程调用同一个函数,我就必须这么做。不过我不确定事件。

感谢阅读。

我假设您的"供应商平台"是您在项目中引用的.Net程序集。如果不是这样(例如,你使用的是一个网络服务),那么这个答案将是不准确的,你可能应该用更多关于你的案例的信息来更新你的问题

这实际上取决于情况。

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

  • 如果第三方lib是单线程的,那么可以保证所有事件都将在同一个线程中激发,因此所有事件处理程序都将被一个接一个地调用,并且您不需要保护您的方法不受并发访问的影响。

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

相关内容

  • 没有找到相关文章

最新更新