我无法在我的应用程序中使用OpenFileDialog。
作为替代,我使用GetOpenFileName()方法:
当应用程序运行并单击按钮并尝试打开文件时,会发生以下情况:
第一次尝试:它返回我的文件路径,但是在文件名之前没有'\',如下所示: c:\ dira \ dirb \ dircfilename.ext
第二次尝试:一切正常
接下来:出现随机崩溃,例如随机访问冲突或GUI冻结,并且即使在任务管理器中也无法杀死应用程序进程或其他错误。
通常,在应用程序彻底崩溃之前,对话框可以工作2-3次。
我的代码有什么问题?
编辑:
作为替代,我使用GetOpenFileName()方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Reader
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{
public int lstructSize;
public IntPtr hwndOwner;
public IntPtr hInstance;
public string lpstrFilter = null;
public string lpstrCustomFilter = null;
public int lMaxCustomFilter;
public int lFilterIndex;
public string lpstrFile = null;
public int lMaxFile = 0;
public string lpstrFileTitle = null;
public int lMaxFileTitle = 0;
public string lpstrInitialDir = null;
public string lpstrTitle = null;
public int lFlags;
public ushort nFileOffset;
public ushort nFileExtension;
public string lpstrDefExt = null;
public int lCustData;
public int lpfHook;
public int lpTemplateName;
}
public class OpenDialog
{
[DllImport("Comdlg32.dll",CharSet = CharSet.Auto)]
public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
}
}
然后在按钮的OnClick事件中使用它,如下所示:
OpenFileName qofn = new OpenFileName();
qofn.lstructSize = Marshal.SizeOf(qofn);
qofn.lpstrFile = "";
qofn.lMaxFile = 256;
qofn.lpstrFileTitle = "";
qofn.lMaxFileTitle = 64;
qofn.hInstance = this.Handle;
source.Text = "Wait...";
if (OpenDialog.GetOpenFileName(qofn))
{
MessageBox.Show("ofn.file: " + qofn. lpstrFile );
}
当应用程序运行并单击按钮并尝试打开文件时,会发生以下情况:
第一次尝试:它返回我的文件路径,但是在文件名之前没有'\',如下所示: c:\ dira \ dirb \ dircfilename.ext
第二次尝试:一切正常
接下来:出现随机崩溃,例如随机访问冲突或GUI冻结,并且即使在任务管理器中也无法杀死应用程序进程或其他错误。
通常,在应用程序彻底崩溃之前,对话框可以工作2-3次。
我的代码有什么问题?
编辑:
我无法使用 OpenFileDialog。我正在使用 WinPE 4.0(Windows 评估和部署工具包 ADK)。当我尝试使用 OpenFileDIalog 时,它会抛出运行时错误 80040111。这可能是因为核心不受支持(就像 Server Core 不支持 OpenFileDialog 一样,错误是相同的)。在 WinPE 4.0 上,它们在诸如记事本之类的应用程序中使用 GetOpenFileName。并且对他们有效。
OpenFileDialog
无法工作? - M.Babcockthis.Handle
不是 HINSTANCE,而是 HWND。 - Thomas Levesque