1

我想在我的应用程序中添加一个 OpenFileDialog。对话框按预期打开,但一旦我关闭对话框,我就会收到有关“CallbackOnCollectedDelegate”的错误。我在网上查找了 OpenFileDialog 示例,但它们看起来与我的代码没有太大区别。我还在stackoverflow上查看了“CallbackOnCollectedDelegate”错误的解决方案,但不幸的是我没有看到我的代码失败的地方。我正在使用类似的结构在我的程序中打开其他自行创建的对话框 - 没有问题。这是我第一次尝试使用预定义的对话框,也许我在这里做了一些奇怪的事情?

OpenFileDialog Dialog_OpenFile;

private void OpenFileButton_Click(object sender, EventArgs e) //open file
{
  if (Dialog_OpenFile == null) //only create once
    {
        Dialog_OpenFile = new OpenFileDialog();
        Dialog_OpenFile.InitialDirectory = ".";
        Dialog_OpenFile.RestoreDirectory = false;
        Dialog_OpenFile.Multiselect = false;
        Dialog_OpenFile.Filter = "OpenOffice (*.ods)|*.ods|Microsoft Excel (*.xlsx)|*.xlsx";
        Dialog_OpenFile.FilterIndex = 2; 
    }

    DialogResult status = Dialog_OpenFile.ShowDialog();
    if (status == DialogResult.OK) { ...do something... }
}

我添加了我收到的错误消息(不幸的是德语,但最重要的部分应该可以理解):

Der Assistent für verwaltetes Debugging ""CallbackOnCollectedDelegate"" hat ein ""C:\Users...\Visual Studio 2013\Projects\myprog\myprog\bin\Debug\myprog.vshost.exe"" festgestellt 中的问题。Zusätzliche Informationen: Für den von der Garbage Collection gesammelten Delegate vom Typ "System.Windows.Forms!System.Windows.Forms.NativeMethods+WndProc::Invoke" wurde ein Rückruf durchgeführt。Dies kann Anwendungsabstürze, Datenbeschädigung und -verlust zur Folge haben。Beim Übergeben von Delegate an nicht verwalteten Code müssen die Delegate von der verwalteten Anwendung beibehalten werden, bis sichergestellt ist, dass sie nie aufgerufen werden。

Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in System.Windows.Forms.dll aufgetreten。Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt。

“myprog.vshost.exe”(CLR v4.0.30319:myprog.vshost.exe):“C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration。 dll”凝胶。Das Laden von Symbolen wurde übersprungen。Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert。Das Programm "[3452] myprog.vshost.exe" wurde mit Code 0 (0x0) bedet。

4

0 回答 0