Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 子类化MS Word';将窗口从VSTO加载项中删除_C#_Crash_Ms Word_Vsto_Subclassing - Fatal编程技术网

C# 子类化MS Word';将窗口从VSTO加载项中删除

C# 子类化MS Word';将窗口从VSTO加载项中删除,c#,crash,ms-word,vsto,subclassing,C#,Crash,Ms Word,Vsto,Subclassing,我试图检测VSTO不提供的一些事件,例如WM_移动、WM_大小等,以便调整窗口的位置。此窗口是由我正在处理的外接程序创建的,当Word窗口发生更改时,它会做出反应。我基本上已经完成了我的任务,但仍然存在一个非常恼人的问题。每当我关闭Word时,它就会弹出它的崩溃处理程序。显然,这与我使用的基于NativeWindow的对象的不当处理有关。我在功能区中放置了一个按钮,可以手动处理对象,效果非常好。我怀疑垃圾收集器由于某种原因没有正常工作。此外,即使在WM_CLOSE或WM_DESTROY上调用Re

我试图检测VSTO不提供的一些事件,例如WM_移动、WM_大小等,以便调整窗口的位置。此窗口是由我正在处理的外接程序创建的,当Word窗口发生更改时,它会做出反应。我基本上已经完成了我的任务,但仍然存在一个非常恼人的问题。每当我关闭Word时,它就会弹出它的崩溃处理程序。显然,这与我使用的基于NativeWindow的对象的不当处理有关。我在功能区中放置了一个按钮,可以手动处理对象,效果非常好。我怀疑垃圾收集器由于某种原因没有正常工作。此外,即使在WM_CLOSE或WM_DESTROY上调用ReleaseHandle(),也不能防止崩溃。以下是我的拦截器对象的代码:

public class OfficeWindow : NativeWindow, IDisposable
{        
    public OfficeWindow(IntPtr handle)
    {
        this.AssignHandle(handle);            
    }

    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        { 
            case (int)WindowMessages.WM_MOVE:
                MessageBox.Show("Move");
                break;
            //other cases
        }

        base.WndProc(ref m);
    }

    #region IDisposable Members

    ~OfficeWindow()
    {
        Dispose(false);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Free other state (managed objects).
        }
        ReleaseHandle();
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    #endregion
}

我使用的是VS 2008、VSTO 3.0和外接程序的目标是Word 2007。

确保Dispose只发生一次。我看到你的析构函数会释放句柄,然后它会再次尝试这样做,当你真的做了处置(真的)。是的,很好的观点。我错过了。然而,它并没有解决我的问题。