如何防止应用程序在 WinRT 中使用文件
How to prevent app from using file in WinRT
我的应用程序有多个线程。第一个线程写入 StorageFile
,第二个线程从同一个 StorageFile
读取。问题是,我无法阻止第二个线程读取该文件,而第一个线程正在写入该文件。我可以使用 Using
关键字来获得对文件的单一访问权限吗?
Whosebug 上有类似的问题,但它不适合我的解决方案。
我的代码:
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;
}
}
我终于通过在内存中的数据上加锁解决了这个问题,而不是在文件上,这会很耗时,但很优雅。然而,在根据 Srirama Sakthivel 的提示寻找解决方案的过程中,我发现这个主题非常有用。我希望这会对某人有所帮助。
我的应用程序有多个线程。第一个线程写入 StorageFile
,第二个线程从同一个 StorageFile
读取。问题是,我无法阻止第二个线程读取该文件,而第一个线程正在写入该文件。我可以使用 Using
关键字来获得对文件的单一访问权限吗?
Whosebug 上有类似的问题,但它不适合我的解决方案。
我的代码:
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;
}
}
我终于通过在内存中的数据上加锁解决了这个问题,而不是在文件上,这会很耗时,但很优雅。然而,在根据 Srirama Sakthivel 的提示寻找解决方案的过程中,我发现这个主题非常有用。我希望这会对某人有所帮助。