[求助] 多窗口打开同一个文件无法载入

问题描述

小弟初学C#,碰到一个问题,我要让winform显示指定文件夹中的PDF文件,我使用了adobereader自带的com组件,然后当指定文件夹中的PDF文件被替换的时候,窗体中的PDF组件也随着变换,我使用了.net的filesystemwatcher控件,随后问题也就来了,当打开一个窗口时,文件显示和替换后显示都没有问题,但同时打开5个窗口时,替换文件夹中的文件,则只能打开两个,其他一个显示在载入,剩下两个则完全没有反应,总结了下,应该是filesystemwatcher下的change事件同时让5个窗体一起访问了文件,导致了文件的无法载入,但我不知道解决的方法和思路,还是有相应的技术处理这种情况,(如果放在局域网,这种情况要如何解决),求各位大侠指点迷津...usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespacePDFDisplay{publicpartialclassMain:Form{publicMain(){InitializeComponent();}AxAcroPDFLib.AxAcroPDFaxAcroPDF=newAxAcroPDFLib.AxAcroPDF();privatevoidMain_Load(objectsender,EventArgse){fileSystemWatcher1.Path=GetPDFDocumentPath();fileSystemWatcher1.InternalBufferSize=1024;axAcroPDF.Location=newSystem.Drawing.Point(0,24);axAcroPDF.Size=newSystem.Drawing.Size(292,242);axAcroPDF.Dock=DockStyle.Fill;this.Controls.Add(axAcroPDF);axAcroPDF.setCurrentPage(GetFilePage());//获取要显示的页码axAcroPDF.LoadFile(GetPDFFilePath(GetPDFDocumentPath()));}///<summary>///获取文件夹位置///</summary>///<returns></returns>privatestringGetPDFDocumentPath(){stringConfigPath=Application.StartupPath+"/Config/FilePath.ini";stringPDFDocumentPath="";FileInfofif=newFileInfo(ConfigPath);DirectoryInfodif=newDirectoryInfo(Application.StartupPath+"/Config");if(dif.Exists){if(fif.Exists){StreamReadersr=newStreamReader(ConfigPath);PDFDocumentPath=sr.ReadLine();sr.Close();if(PDFDocumentPath.Length<0){MessageBox.Show("FilePath.ini文件中没有配置完全!");}}else{MessageBox.Show("文件不存在!");}}else{MessageBox.Show("文件夹不存在!");}returnPDFDocumentPath;}///<summary>///获取PDF文件路径///</summary>///<paramname="PDFDocumentPath">PDF文件夹路径</param>///<returns></returns>privatestringGetPDFFilePath(stringPDFDocumentPath){stringPDFFilePath="";DirectoryInfodif=newDirectoryInfo(PDFDocumentPath);if(dif.Exists){FileInfo[]fif=dif.GetFiles();foreach(FileInfoPDFFileNameinfif){PDFFilePath=PDFDocumentPath+PDFFileName.Name.ToString();}}else{MessageBox.Show("PDF存放文件夹已被移动或删除!");}returnPDFFilePath;}privatevoidfileSystemWatcher1_Changed(objectsender,FileSystemEventArgse){axAcroPDF.LoadFile(GetPDFFilePath(GetPDFDocumentPath()));}///<summary>///获取文件路径///</summary>///<returns></returns>privateintGetFilePage(){stringFilePage="";stringConfigPath=Application.StartupPath+"/Config/FilePath.ini";FileInfofif=newFileInfo(ConfigPath);DirectoryInfodif=newDirectoryInfo(Application.StartupPath+"/Config");if(dif.Exists){if(fif.Exists){StreamReadersr=newStreamReader(ConfigPath);sr.ReadLine();FilePage=sr.ReadLine();sr.Close();}}if(FilePage==null){return1;}else{returnInt32.Parse(FilePage);}}}}

解决方案

解决方案二:
LZ要考虑一下多线程貌似多个线程同时访问一个文件不能像LZ这样处理的如果要多个线程访问,可以先将PDF复制一个,给个随机文件名,去访问副本,访问结束再把它删除也许可以解决LZ的问题

时间: 2025-01-21 08:08:17

[求助] 多窗口打开同一个文件无法载入的相关文章

Win8系统同一窗口打开浏览文件夹设置无效怎么修复

  一般我们会将win8系统浏览文件夹的方式设置为"在同一窗口中打开每个文件夹",这和win7 64位旗舰版相似,这样就可以更加方便的对这些文件夹进行管理,在前面教程中也与大家介绍过Win8系统在同一窗口中打开每个文件夹设置方法.但有部分用户反映,在设置浏览文件夹选项后出现此现象,并且不能在同一窗口中打开每个文件夹,对于该问题小编特别整理了三种修复教程. 修复方法一: 1.Win+R调出运行 ,输入"regedit"回车或确定打开注册表; 2.然后找到注册表这一项:

Linux文件共享(二)——两个独立进程打开同一个文件

如果两个独立进程各自打开了同一文件,则有图3-2中所示的安排.我们假定第一个进程使该文件在文件描述符3上打开,而另一个进程则使此文件在文件描述符4上打开.打开此文件的每一个进程都得到一个文件对象,但对一个给定的文件只有一个v节点表项.每个进程都有自己的文件对象的一个理由:这种安排使每个进程都有它自己对该文件的当前位移量.这种情况不会增加对应的打开文件引用计数,而会增加dentry的引用.          给出了这些数据结构后,现在对前面所述的操作作进一步说明. (1) 在完成每一个write后

win8总是在新窗口打开文件夹怎么办?

  Windows系统默认是在同一个窗口打开新的文件夹的,但是可能因为误点,导致设置出错,在新窗口打开文件夹,可以通过设置解决. Win8在同一窗口打开每个文件夹的方法与win7基本相似,只是文件夹选项的位置不一样, win7的设置方法: 打开计算机,按一下键盘Alt,在弹出的菜单栏,点击工具-文件夹选项-常规-浏览文件夹-选择"在同一窗口中打开每一个文件夹", win8的具体设置如下: 打开计算机,点击查看-点击"选项"按钮-常规-浏览文件夹-在同一窗口中打开没一

如何在Win7里实现一个窗口打开多个文件夹的方法

  我们常常在使用电脑的时候都会发现,一些win7镜像用户在打开文件夹会发现我们不能同时在一个窗口下打开,用起来非常的不方便,遇到这样的情况该怎么办呢,其实只需要设置一下就可以了,我们来看看下列几个方法吧! 方法一: 1.首先我们在自己的电脑桌面打开我们的计算机图标,然后在窗口中找到我们的工具,然后在选择文件夹选项功能. 2.在打开了文件夹选项窗口后,我们在选中我们需要设置的在同一个窗口打开每个文件夹这个功能勾选,然后点击确认. 3.然后我们保存了以后就可以回到我们的桌面,然后在试试打开文件夹是

解决win7不能在同一窗口打开多个文件夹的方法

方法一: 1.打开"计算机",找到菜单栏的"工具",选择"文件夹选项",如图 2.弹出"文件夹选项"窗口,选中"在同一个窗口打开每个文件夹",点击确定 3.打开文件夹试试是否可以在同一个窗口中打开每个文件夹,如果不行,可以试一下方法二. 方法二: 1.使用快捷键"windows+R"(windows键就是键盘上带有"windows窗口图标"的键),出现"运行

设置Win 8系统同窗口打开文件夹的方法

Windows8在同一窗口打开每个文件夹的方法与win7基本相似,只是文件夹选项的位置不一样,win7的设置是在:工具-文件夹选项-常规-浏览文件夹-选择"在同一窗口中打开每一个文件夹",Windows8的具体设置如下: 查看-点击"选项"按钮-常规-浏览文件夹-在同一窗口中打开每一个文件夹.

Win10系统下如何从新窗口打开文件夹提高操作效率

  在Win10系统文件夹的操作使用中,很多用户经常要反复地在前后文件夹来回操作,这样效率很低.其实我们可以从新窗口打开一个文件夹,直接在两个文件夹之间操作. 方法 1.打开一个目标文件夹. 2.选中目标文件夹,点击右键. 3.选择从新窗口打开. 4.在两个文件夹之间操作. 另外,当你打开多个文件夹,快速进行窗口切换,才能维持更高的文件操作效率.

eclipse 每次打开xml文件都会一直loadding data for android 求助

问题描述 eclipse 每次打开xml文件都会一直loadding data for android 求助 eclipse 每次打开xml文件都会一直loadding data for android, 如下图 , 求助 解决方案 它要加载Android的库,不影响你使用就行 解决方案二: 去除eclipse中xml文件的 No grammar constraints (DTD or XML schema) detected for the document警告每次运行都会自动生成****ou

Win8系统在同一个窗口不能打开新文件夹的三种解决方法

  Win8系统同时打开多个文件夹,他们会叠加在同一个窗口.但是有的用户在却不能在同一窗口打开多个文件夹.已经打开一个Win8文件夹的情况下,就不能在同一个窗口打开新的文件夹了,这个时候应该怎么办呢? 方法一: 1.Win+R调出运行 ,输入"regedit"回车或确定打开注册表; 2.然后找到注册表这一项:HKEY_CLASSES_ROOTDirectoryshell 3.将值改为none; 方法二: 1.Win+R调出运行,输入sfc /scannow 让系统自动运行,修复; 2.