Tag: 异步 等待

C#GUI刷新和异步串口通信

我正在尝试创建一个通过串口与硬件通信的应用程序,并将结果报告给gui。 目前通过GUI移动是由KeyEvents引起的,它触发了GUI的下一个“页面”的绘制。 然而,在一步(按下键后)我需要绘制新页面并通过串口发送一些命令。 命令发送通过以下方式完成: port.Write(data, 0, data.Length); 然后我等待DataReceivedHandler触发等待答案 – 它只是确定存在等待的数据并且正在以另一种方法处理数据。 起初我只是将“发送和接收”命令放在“绘制部件”之后绘制页面的function中,但它使其卡住 – 数据被转移,但页面未被绘制 – 它被冻结。 然后我做了一个异步方法: private async void SendData() { await Task.Run(() => serialClass.SendAndReceive(command)); // process reply etc. } 使用的是这样的: public void LoadPage() { image = Image.FromFile(path); //do some stuff on image using Graphics, adding texts etc. picturebox1.Image = image; SendData(); } 它工作正常,但我需要“重新加载”页面(再次调用LoadPage)。 如果我在async方法中这样做: […]

暂停/恢复异步任务的模式?

我有一个主要是IO绑定的连续任务(后台拼写检查器与拼写检查服务器通信)。 有时,此任务需要暂停并稍后恢复,具体取决于用户活动。 虽然暂停/恢复基本上是async/await所做的,但我发现很少有关于如何为异步方法实现实际暂停/播放逻辑的信息。 有推荐的模式吗? 我也考虑过使用Stephen Toub的AsyncManualResetEvent ,但认为这可能是一种矫枉过正。

并行执行任务

好吧,基本上我有一堆任务(10),我想同时启动所有任务并等待它们完成。 完成后我想执行其他任务。 我读了很多关于这方面的资源,但我无法为我的具体情况做好准备…… 这是我目前拥有的(代码已经简化): public async Task RunTasks() { var tasks = new List { new Task(async () => await DoWork()), //and so on with the other 9 similar tasks } Parallel.ForEach(tasks, task => { task.Start(); }); Task.WhenAll(tasks).ContinueWith(done => { //Run the other tasks }); } //This function perform some I/O operations public async Task […]

从WCF服务调用异步方法

我想从WCF服务调用异步方法,如: [ServiceContract] interface IService { [OperationContract] int SomeMethod(int data); } int SomeMethod(int data) { var query = … build LINQ query; var response = await query.ToListAsync(); return response.Length; } 我不想将async添加到IService接口或SomeMethod方法。 使用异步方法是一个内部问题,不应该在接口中反映出来。 我怎样才能做到这一点? 澄清: 我的问题是在非async方法中使用await 。 我不希望服务合同发生变化(客户端不一定知道async是什么),我不想将方法拆分为BeginSomeMethod和EndSomeMethod 。 我想要一个await 内部使用await方法。