在文本框中键入时出现 AccessViolationException

AccessViolationException when typing in Textbox

大约一周前,每当我在某个文本框中键入内容时,我正在处理的一个程序开始崩溃并出现 AccessViolationException。我已经将它简化为这个测试用例,但我没有想法:

Imports System.Windows.Forms

Public Class Start
    Inherits System.Windows.Forms.Form

    <STAThread()>
    Public Shared Sub Main(args() As String)
        Application.EnableVisualStyles()
        Application.Run(New Start())
    End Sub

    Private txtNotes As System.Windows.Forms.TextBox
    Public Sub New()
        Me.txtNotes = New System.Windows.Forms.TextBox()
        Me.txtNotes.Multiline = True
        Me.Controls.Add(Me.txtNotes)
    End Sub
End Class

当我使用 Visual Studio 构建此程序时,如果我在文本框中键入内容(总是),它会崩溃。如果我使用 vbc.exe Start.vb /target:winexe /main:Start /out:Start.exe 构建它,它工作正常。

此外,我发现使用 Visual Studio:

删除其中任何一行可以阻止它崩溃
Application.EnableVisualStyles()
Me.txtNotes.Multiline = True

我已经完成了 Visual Studio 的修复安装,并使用 sfc.exe 检查了损坏的系统文件。我试过寻找这个问题的现有解决方案,但没有找到任何东西。什么可能导致 Visual Studio 构建损坏的可执行文件?是否有一些设置可以做到这一点?

编辑:我现在也是 运行 AVG 杀毒软件。我记得在这些崩溃开始时有一个 AVG 更新。根据下面的评论之一,禁用 AVG,然后扫描可执行文件可以防止它崩溃。这似乎表明问题出在 AVG 上。

我遇到了同样的问题。通过取消选中启用 XP 视觉样式解决了这个问题。

一些背景知识,以防对其他人有所帮助。应用程序最初是在 VS2010 中创建的。移至 VS2015RC。一切正常。重新安装 OS (Win7) 后出现问题。即使是旧版本的应用程序也无法运行,尽管它确实可以在所有其他 Win7 桌面上继续运行,包括新安装的。如果有人知道为什么,那会很有趣。

我们的一些客户在 Windows 7 上的安装也遇到了同样的问题。我们的产品是带有 WinFoms 和 .net 4.0 的 C#。在 WinForms 下的多行文本框中键入会导致 AccessViolationException 崩溃。您可以将文本粘贴到框中,也可以将其删除,只是不要键入。单行文本框很好。我们还发现删除 Application.EnableVisualStyles() 可以解决问题。

无需更改代码即可修复它的另一种方法是右键单击程序图标并将兼容性设置更改为 运行 Windows 7 的程序。

我遇到了同样的问题,我也是运行 AVG。

作为 AVG 提供修复程序之前的临时解决方案,您可以将 .exe 文件添加到 AVG 的例外列表中。我可以确认这会删除 Visual Studio.

中显示的 AccessViolationException
  1. 打开 AVG,转到选项
  2. "Advanced settings..."
  3. 例外情况
  4. "Add exception"
  5. 选择"Application or File"
  6. Select 你的可执行文件(在我的例子中,我使用了.../bin/Debug/myexe.exe)
  7. 我查了"Even when the file has been changed or updated"
  8. 最后,我勾选了底部的三个选项:"Resident Shield"、"Manual and Scheduled Scan"和"Identity Protection"

如其他答案中所述,我没有对视觉样式或兼容模式进行任何更改。