尝试从 ThreadPreprocessMessage 中删除事件处理程序时出现异常
本文关键字:程序 异常 事件处理 删除 ThreadPreprocessMessage | 更新日期: 2023-09-27 17:55:34
尝试将我的事件处理程序添加到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)
{
}
}
}
当我运行它时,我在析构函数中得到这个异常:
未处理的异常:系统无效操作异常:本地数据存储槽存储已释放。
是什么原因造成的,我该如何解决?
正如文档所述。注册和取消注册调用存储在线程本地数据结构中。您刚刚尝试在终结器线程上运行的终结器中取消注册(==不同线程)。这将不起作用,因为您必须在注册的同一线程上取消注册。