当前位置: 首页 > 编程语言 > C#

C#、WPF-OpenFileDialog未出现Share

时间:2023-04-11 01:12:17 C#

C#、WPF-OpenFileDialog未出现显示OpenFileDialogs或SafeFileDialogs。privatevoidbtnBrowseNet_Click(objectsender,RoutedEventArgse){OpenFileDialogofd=newOpenFileDialog();ofd.CheckPathExists=true;ofd.Multiselect=false;ofd.Title="打开网络配置批处理文件...";ofd.ValidateNames=true;ofd.Filter="逗号分隔值文件|*.csv";if(ofd.ShowDialog()==true){//...}}这段确切的代码确实完成了一次它应该做的事情,将近五分钟后我可以点击按钮但没有任何反应但鼠标指针转动进入忙指示器,然后什么都没有。我可以单步执行该方法或执行类似bool?显示=ofd.ShowDialog();但无论如何,对话框永远不会显示。当然,在这种情况下它显示为false。昨天我浪费了一个半小时的搜索时间,当我退出时,我又试了一次,突然就成功了。有时有效,有时无效。但这似乎是特定于项目的,因为我可以将相同的代码粘贴到一个新项目中,并且它可以正常工作。此外,这是该项目唯一看起来有点可疑的地方。其他一切都按预期工作。这里有没有人经历过类似的事情,从而知道我能做什么?任何帮助都应该受到高度赞赏。OpenFileDialog有大量可能的故障模式。使用一个将您的应用程序暴露给您计算机上安装的任何shell扩展的工具。其中许多可能非常不稳定,并且扩展作者不太可能检查它是否在WPF进程中正常工作。通过运行SysInternals的AutoRuns实用程序修复此问题。单击资源管理器选项卡并查找名称中包含“ShellEx”的组。取消选中任何非Microsoft发布的内容。重新启动并检查问题是否已解决。这件事最近发生在我身上。问题在于Main方法未标记为STAThread,这导致WPFOpenFileDialog的ShowDialog方法无限期阻塞。staticvoidMain(string[]args){varopenFileDialog=newOpenFileDialog();varresult=openFileDialog.ShowDialog();}永远不会退出或抛出异常,而[STAThread]staticvoidMain(string[]args){varopenFileDialog=newOpenFileDialog();varresult=openFileDialog.ShowDialog();}将按预期工作。我遇到了类似的问题,正如Garrett所说,这是一个STA问题。在过去的几个月里,我一直在与STA问题作斗争,因为我需要从控制台窗口启动屏幕(测试目的)——这意味着调用线程不是STA,但可以像这样模拟:[STAThread]privatevoidExecute(){try{Threadt=newThread(()=>{OpenFileDialogdlg=newOpenFileDialog();//如果当前//线程不是STAvarresult=dlg.ShowDialog();});t.SetApartmentState(ApartmentState.STA);t.开始();}catch(Exceptionex){//处理异常ex.LogException();不幸的是,仅将方法标记为STAThread是行不通的,我必须在标记为STA的线程中开始操作。我知道这个问题是在2010年提出的,直接答案不是我提供的那个,但今天的日期会解决这个问题还有其他原因。我最近在一个新的虚拟机上安装了我的软件,它在我的开发计算机和许多其他测试机器上运行良好。Windows7虚拟机太新了,没有安装SP1KB976932。安装后,我可以使用打开的沙盘保存文件对话框。我希望这可以帮助别人。不确定你是否弄明白了,但我最近遇到了同样的问题。在我的例子中,问题是我的应用程序没有构建现有窗口。我的代码看起来像这样。privatevoidApplication_Startup(objectsender,StartupEventArgse){stringstartupFileName=String.Empty();if(startupMode=StartupMode.Load){//打开现有文件OpenFileDialogopenDlg=newOpenFileDialog();如果(openDlg.ShowDialog()!=true)返回;startupFileName=openDlg.FileName;}else{//创建一个新文件SaveFileDialogsaveDlg=newSaveFileDialog();如果(saveDlg.ShowDialog()!=true)返回;startupFileName=saveDlg.FileName;}//显示我的主应用程序窗口MainWindowmyMainWindow=newMainWindow(startupFileName);myMainWindow.Show();}OpenFileDialog(或SaveFileDialog)会立即返回false而不会显示,因为我的应用程序没有将自身附加到的窗口。我的解决方案是在创建主窗口之后但在调用Show()方法之前放置打开/保存代码。在控制台应用程序中,您需要STAThread组件才能工作。但WPF不同。我建议您仅在窗口启动并且主线程开始工作后才使用文件对话框。尝试在其生命周期的某个MainWindow事件中显示您的对话框。有时候[staThread]运行不正常,可以试试这个:以上是C#学习教程:C#,WPF-OpenFileDialog没有出现分享所有内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—publicvoidshowOpenFileDialog(){OpenFileDialogim=newOpenFileDialog();if(im.ShowDialog()==DialogResult.OK){textBox1.Text=im.FileName;}}privatevoidselect_button_Click(objectsender,EventArgse){ThreadnewThread=newThread(newThreadStart(showOpenFileDialog));newThread.SetApartmentState(ApartmentState.STA);新线程.开始();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: