尝试从 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)
        {
        }
    }
}

当我运行它时,我在析构函数中得到这个异常:

未处理的异常:系统无效操作异常:本地数据存储槽存储已释放。

是什么原因造成的,我该如何解决?

尝试从 ThreadPreprocessMessage 中删除事件处理程序时出现异常

正如文档所述。注册和取消注册调用存储在线程本地数据结构中。您刚刚尝试在终结器线程上运行的终结器中取消注册(==不同线程)。这将不起作用,因为您必须在注册的同一线程上取消注册。