Моя задача - записать данные, поступающие от датчика 30 раз в секунду, в файл .csv
.Если sersor отправляет неверные данные, я не пишу это и просто жду.Если данные снова в порядке, мне нужно создать новый файл и начать записывать данные там.Вот мой код:
class FileWriter
{
string filename;
public FileWriter()
{
}
public void SetFilename(string filename)
{
this.filename = filename;
}
public async void WriteData(string data)
{
StorageFile file = await KnownFolders.PicturesLibrary.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
using (var outputStream = stream.GetOutputStreamAt(stream.Size))
{
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
{
dataWriter.WriteString(data);
await dataWriter.StoreAsync();
}
await outputStream.FlushAsync();
}
stream.Dispose();
}
}
Но я всегда получаю:
Exception thrown: 'System.IO.FileLoadException' in
System.Private.CoreLib.ni.dll
WinRT information: The file is in use. Please close the file before continuing.
FileLoadException: The process cannot access the file because it is being used by another process.
Я думаю, это потому, что файл открывается асинхронно и у него нет времени открываться 30 раз в секунду.Но я понятия не имею, как это исправить.
РЕДАКТИРОВАТЬ: более подробную информацию.Я взял этот пример .Есть класс SpatialMappingObserver
, у которого есть метод Update()
, который вызывается 30 раз в секунду.Там я звоню своему WriteData()
, чтобы записать состояние камеры Хололенса в файл.Поскольку Update()
не является асинхронным, я не могу позвонить await WriteData()
.