C# 如何防止应用程序在WinRT中使用文件
我有一个有几个线程的应用程序。第一个线程写入C# 如何防止应用程序在WinRT中使用文件,c#,multithreading,windows-runtime,winrt-async,C#,Multithreading,Windows Runtime,Winrt Async,我有一个有几个线程的应用程序。第一个线程写入存储文件,第二个线程读取相同的存储文件。问题是,当第一个线程写入该文件时,我无法阻止第二个线程读取该文件。这里是否有类似于使用关键字的内容,我可以使用它来获得对文件的单一访问权限 在StackOverflow上也有类似的问题,但它不适合我的解决方案 我的代码: public async static Task<bool> Save(string filename, object o) { try
存储文件
,第二个线程读取相同的存储文件
。问题是,当第一个线程写入该文件时,我无法阻止第二个线程读取该文件。这里是否有类似于使用
关键字的内容,我可以使用它来获得对文件的单一访问权限
在StackOverflow上也有类似的问题,但它不适合我的解决方案
我的代码:
public async static Task<bool> Save(string filename, object o)
{
try
{
Stream stream;
var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
stream = await file.OpenStreamForWriteAsync();
if (o == null || stream == null)
{ }
else
{
DataContractSerializer ser = new DataContractSerializer(o.GetType());
ser.WriteObject(stream, o);
}
return true;
}
catch (Exception e)
{
return false;
}
}
公共异步静态任务保存(字符串文件名,对象o)
{
尝试
{
溪流;
var folder=Windows.Storage.ApplicationData.Current.LocalFolder;
var file=await folder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);
stream=wait file.OpenStreamForWriteAsync();
if(o==null | | stream==null)
{ }
其他的
{
DataContractSerializer ser=新的DataContractSerializer(o.GetType());
ser.WriteObject(流,o);
}
返回true;
}
捕获(例外e)
{
返回false;
}
}
我最终解决了这个问题,在内存中的数据上添加了锁,而不是在文件上添加锁,这虽然很优雅,但很耗时。然而,在对斯利拉玛·萨基维尔的暗示做出反应的过程中,我发现这是一个非常有用的话题。我希望这会对某些人有所帮助。您正在寻找某种同步机制吗?当第一个线程仍在写入文件时,您希望第二个线程做什么?是的,这是正确的术语。同步机构。第二个线程应该等到编写完成并且文件“可以自由操作”之后。使用锁或waithandle,以适合您的要求为准。您应该回答自己的问题,然后将问题标记为已回答。