C# System.AccessViolationException and System.Runtime.Intero



我们正在使用C#创建一个漫画书应用程序,并像往常一样在启动时创建一个mainForm,然后当按下"1"键时,会弹出一个名为detailForm的新表单,显示所选漫画书的详细信息。还有一个第三个表单,如果你在detailForm上再次按下"1",它将显示另一个名为comicForm的表单,显示实际的漫画书。

当您按"1"从mainForm转到detailForm,然后立即按"2"返回mainForm时,问题就开始了。当你这样做的时候,我们会得到这两个异常中的任何一个。它不一致,可能显示System.AccessViolationException或System.Runtime.InteropServices.SEHException.

我们在detailForm上有一个COM对象,它显示了每个漫画人物特有的youtube视频。

每次构建项目时都会抛出两个警告:

1>  COM Reference 'AcroPDFLib' is the interop assembly for ActiveX control 'AxAcroPDFLib' but was marked to be linked by the compiler with the /link flag. This COM reference will be treated as a reference and will not be linked.
1>  COM Reference 'ShockwaveFlashObjects' is the interop assembly for ActiveX control 'AxShockwaveFlashObjects' but was marked to be linked by the compiler with the /link flag. This COM reference will be treated as a reference and will not be linked.

在运行这个代码段后,它每次都会崩溃:

private void detailForm_KeyDown_1(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.D2)
        {
            player.controls.stop();
            this.Close();
        }
        if (e.KeyData == Keys.D1)
        {
            this.Close();
            player.controls.stop();
            ComicForm comicShow = new ComicForm(newComic);
            comicShow.Show();
            comicShow.Focus();
        }
    }

崩溃后,它在Program.cs中突出显示了这一点,但实际上并没有运行它:

Application.Run(new MainForm());

如果尚未设置,请在visual studio项目的引用中查找ActiveX的引用,选择该引用并通过属性窗口查看其属性,查找"嵌入互操作类型"属性并将其设置为"False"。

这可能会解决问题。

相关内容

  • 没有找到相关文章

最新更新