发生了此错误的单个实例,我无法重现它,遗憾的是日志不提供任何有用的信息。此线程上的最后一个操作似乎完成,然后弹出这个未处理的异常:
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.Threading.PriorityQueue`1.RemoveItem(PriorityItem`1 item)
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
我尝试在网上搜索堆栈跟踪中的PriorityQueue.RemoveItem(item)
调用,但我找不到有类似问题的人。应用程序事件中没有任何内容可以暗示内存泄漏或任何其他时髦的内容。无论如何,我很好奇是否有人看到类似的东西,或者有任何有根据的猜测可能导致这种情况。
此外,这里是PriorityQueue.RemoveItem(item)
方法的代码(可以找到PriorityQueue类的代码here):
public void RemoveItem(PriorityItem<T> item)
{
PriorityChain<T> chain = item.Chain;
// Step 1: Remove the item from its priority chain.
RemoveItemFromPriorityChain(item);
// Step 2: Remove the item from the sequential chain.
RemoveItemFromSequentialChain(item);
// Note: we do not clean up empty chains on purpose to reduce churn.
}
我认为空引用异常正在发生,因为item
为空?无论如何,任何想法或猜测都会非常感激。