尝试将我的事件处理程序添加到ComponentDispatcher.ThreadPreprocessMessage
事件中,如下所示:
using System;
using System.Windows.Interop;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
new Cc();
}
}
public class Cc
{
public Cc()
{
ComponentDispatcher.ThreadPreprocessMessage += Method;
}
~Cc()
{
ComponentDispatcher.ThreadPreprocessMessage -= Method;
}
private void Method(ref MSG msg, ref bool handled)
{
}
}
}
当我运行它时,我在析构函数中得到了这个异常:
未处理的异常:System.InvalidOperationException:已释放LocalDataStoreSlot存储。
导致它的原因以及如何解决?
答案 0 :(得分:4)
作为docs州。寄存器和取消注册调用存储在线程本地数据结构中。您刚刚尝试在终结器线程(==不同线程)上运行的终结器中取消注册。这不起作用,因为您必须在注册的同一个线程上取消注册。