dictionary本身是线程安全的,不会死锁
不过如果需要对字典进行遍历,你需要自己加lock控制,否则可能会发生在遍历的过程中索引超出界限等问题

解决方案 »

  1.   


    程序里已经这么做了  debug了好几天 出现了一次未响应 所以才怀疑是不是dictionary死锁了是不是 子线程的异常 全局是捕捉不到的? 求技术大牛指导
      

  2.   

    全局是主线程的,异步是另外一个线程的,异步异常你应该通过另一种方式来捕获
    // Handle unhandled exceptions
                Application.ThreadException +=
                    new ThreadExceptionEventHandler(Application_ThreadException);            AppDomain.CurrentDomain.UnhandledException +=
                    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
      

  3.   


    在program 里的main方法里加了这个 还是捕捉不到任何异常 但是程序未响应。
      

  4.   


    程序里已经这么做了  debug了好几天 出现了一次未响应 所以才怀疑是不是dictionary死锁了手工、debug,是不靠谱的。你只有进行成千上万次自动测试,然后发现了bug,才应该debug。你应该能够重现bug了,然后在一两条语句上设置断点,或者根本不设置断点而等着调试器自动在捕获异常时中断。而不是胡乱给许多代码设置断点去搞什么debug。哪有平白无故瞎debug的?你的那种“debug了好几天了”简直是莫名其妙的,你不知道如何重现bug,干么去debug?
      

  5.   

    基本上,跟一个学生课堂练习一样地去“debug程序”,是发现不了问题的。要发现并发问题,你要写写一个程序,一旦执行就自动进行10个线程100次并发地dictionaty操作,然后告诉你”已经执行完毕了“。并且你今天做了5次这样的操作没有遇到问题,说不定明天突然第一次做就抛出异常了。如果只知道手工“debug”,那样的编程肯定不靠谱。
      

  6.   

    千万别这么做,Dictionary不是线程安全的。你可以使用ConcurrentDictionary<TKey, TValue> 类,在命名空间System.Collections.Concurrent中。
      

  7.   


    程序里已经这么做了  debug了好几天 出现了一次未响应 所以才怀疑是不是dictionary死锁了是不是 子线程的异常 全局是捕捉不到的? 求技术大牛指导首先,異常不時出現在什麽“lock”上。你根本沒沒有寫lock,怎麽會有“死鎖”?人家說三lu奶粉you毒,你來一句“可我沒有找到qing化鉀啊?”,這就不對了。它的問題根本不是lock問題。子線程中的異常,在vs調試環境運行時,肯定可以被調試器捕獲到。調試器一旦捕獲到異常斷點,你就可以從哪一行代碼開始調試了。完全不會因爲它是在子線程中而不能捕獲。除非你寫了try...catch之類的代碼自己欺騙了自己。
      

  8.   

    異常不時出現在什麽“lock”上。你根本沒沒有寫lock  -->   異常不会出現在什麽“lock”上。你根本沒沒有寫lock
      

  9.   


    你置ConcurrentDictionary于何地?