相关疑难解决方法(0)

在多线程场景中调用Dictionary对象的set_item方法时抛出NullReferenceException

当页面初始化将从配置文件加载一些信息时,我们的网站有一个配置页面,如"config.aspx".为了缓存加载的信息,我们提供了一个工厂类,我们调用工厂的公共方法来获取页面加载时的配置实例.但有时当重新启动应用程序池时,我们在事件日志中发现了一些错误消息,如下所示:

Message: Object reference not set to an instance of an object.
Stack:   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)
   at ObjectFactory.GetInstance(string key)
   at config.Page_Load(Object sender, EventArgs e)
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

工厂类实现如下:


public static class ObjectFactory
{
    private static object _InternalSyncObject;
    private static Dictionary _Instances;

    private static object InternalSyncObject
    {
        get
        {
            if (_InternalSyncObject …
Run Code Online (Sandbox Code Playgroud)

c# multithreading dictionary locking

44
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×1

dictionary ×1

locking ×1

multithreading ×1