我有一个同时被2个事件访问的对象。
首先,用户定义的事件将访问它,然后projectItemsEvent_ItemAdded事件再次打开它。
并收到此错误“进程无法访问该文件,因为它正由另一个进程使用。”
请帮忙!
谢谢
代码示例:
void ProjectItemEvents_ItemAdded()
{
Util util = new Util(_applicationObject.Solution, CurrentSelectedProject)
if (name != null)
{
util.AddNewObject();
}
}
void addItem(object sender, WebReferenceEventArgs e)
{
try
{
System.Threading.Thread.Sleep(4500);
Util util = new Util(_applicationObject.Solution, CurrentSelectedProject)
util.AddNewObject();
}
catch (Exception ex)
{
}
}
答案 0 :(得分:2)
听起来你正在两个事件处理程序中打开一个文件(如果没有代码示例,很难说)。
如果您只是阅读文件(而不是修改/覆盖它),您可以将其打开以进行共享访问,并允许多个进程打开相同的文件。
FileInfo fi = new FileInfo(@"C:\someFile.txt");
FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.Read);
如果您发布了一些代码段,我们可能会帮助您将更改集成到您已有的内容中。
<强>更新强>
查看代码后,我的猜测是Util
类内部存在文件访问问题。你也可以发布它的构造函数吗?
答案 1 :(得分:0)
如果您无法避免事件发生冲突,则应该使用 lock 关键字。
http://msdn.microsoft.com/en-us/library/c5kehkcz(VS.80).aspx
http://www.toolazy.me.uk/template.php?content=lock(this)_causes_deadlocks.xml
答案 2 :(得分:0)
您必须确保在读完文件后关闭FileStream。
FileStream.Close();