首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c# xaml中使用ReaderWriterLock

在c# xaml中使用ReaderWriterLock
EN

Stack Overflow用户
提问于 2014-12-23 18:37:44
回答 1查看 51关注 0票数 0

我想在这个函数中使用ReaderWriterLock:

代码语言:javascript
复制
    static async void ETDGazeDataEvent(ETMWNet.ETGazeDataType pGazeData)
    {
        StorageFolder ETfolder = ApplicationData.Current.LocalFolder;
        StorageFile file = await ETfolder.CreateFileAsync("Log.ETDGazeDataEvent.txt", CreationCollisionOption.OpenIfExists);
        String ETAnswer = pGazeData.FrameNum + " Time: " + pGazeData.TimeStamp + " X: " + pGazeData.Left.GazePointPixels.x + " Y: " + pGazeData.Left.GazePointPixels.y + " \r\n";
        await Windows.Storage.FileIO.AppendTextAsync(file, ETAnswer);
    }

此函数每秒调用30次,每次都将数据写入文本文件。我想要添加锁定函数直到它完成的代码,以便每次都写入采样数据。我需要添加哪些代码才能在vs2013 c# xaml上很好地工作?

EN

回答 1

Stack Overflow用户

发布于 2014-12-23 22:49:10

我想添加锁定函数直到它完成的代码,以便每次都写入采样数据。

你真正想要的是有序执行,而不仅仅是互斥。因此,ReaderWriterLock (或任何其他互斥原语)是错误的解决方案。但是,队列可以很好地工作。

周围没有太多支持异步的队列,但TPL Dataflow有一个很好的队列,叫做ActionBlock。你可以这样使用它:

代码语言:javascript
复制
private static readonly ActionBlock<ETMWNet.ETGazeDataType> _queue = new ActionBlock<ETMWNet.ETGazeDataType>(
  async pGazeData =>
  {
    StorageFolder ETfolder = ApplicationData.Current.LocalFolder;
    StorageFile file = await ETfolder.CreateFileAsync("Log.ETDGazeDataEvent.txt", CreationCollisionOption.OpenIfExists);
    String ETAnswer = pGazeData.FrameNum + " Time: " + pGazeData.TimeStamp + " X: " + pGazeData.Left.GazePointPixels.x + " Y: " + pGazeData.Left.GazePointPixels.y + " \r\n";
    await Windows.Storage.FileIO.AppendTextAsync(file, ETAnswer);
  });

static void ETDGazeDataEvent(ETMWNet.ETGazeDataType pGazeData)
{
  _queue.Post(pGazeData);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27618642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档