【发布时间】:2018-04-07 21:30:01
【问题描述】:
我有一个包含两个表单的应用程序。
在第一种形式(MainMenu)中,我声明并初始化了一个 FileStream 来锁定一个特定的文件。在第二种形式(EdiMenu)中,我只是声明了另一个 FileStream。
当用户点击一个按钮时,文件流和文件锁应该被赋予表单二中的文件流,并且第一个表单将关闭。
public partial class MainMenu : Form
{
EdiMenu Edi_Menu; // Second form
private string applicationConfigurationFile = "configuration.xml";
private FileStream configurationFile;
private void mainMenu_Load(object sender, EventArgs e)
{
configurationFile = new FileStream(applicationConfigurationFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
configurationFile.Lock(1, configurationFile.Length);
}
private void LoadEdiForm_Click(object sender, EventArgs e)
{
XDocument xdoc = XDocument.Load(applicationConfigurationFile); // Throws an exception
XDocument xdoc = XDocument.Load(configurationFile); // Works
// Code to check the file content
Edi_Menu = new EdiMenu();
Edi_Menu.configurationFilePublic = configurationFile;
Edi_Menu.Show();
this.Close(); // First form terminates here and the second form remains
}
}
// Second Class/Form
public partial class EdiMenu : Form
{
private string applicationConfigurationFile = "configuration.xml";
private FileStream configurationFile;
public FileStream configurationFilePublic
{
get { return configurationFile; }
set { configurationFile = value; }
}
private void FillDatagrid()
{
XDocument xdoc = XDocument.Load(applicationConfigurationFile); // Throws an exception
XDocument xdoc = XDocument.Load(configurationFile); // Throws an exception
}
}
在第二种形式中,当我不想使用 XDocument 读取文件时,无论我传递字符串还是 FileStream,它都会引发异常。
有人能指出正确的方向吗,如何从应用程序开始锁定文件到应用程序结束,以及如何在应用程序的任何地方使用锁定的文件,而不会出现文件被另一个进程锁定的异常?
【问题讨论】:
-
有什么异常?
-
它抛出了一个异常,该文件正在被另一个进程使用
标签: c# winforms filestream