c# - 如何通过 IsActiveChanged 运行异步任务
问题描述
我有一个我试图通过 OnIsActiveChanged 运行的任务,以便它在我作为视图打开时运行。我确定我正在做一些显而易见的事情,但我对异步代码相对较新。OnIsActiveChanged
告诉我时出错了
Task SettingsView.OnIsActiveChanged(object?, EventArgs)
有错误的返回类型。
这是我尝试使用的方法:
public async Task OnIsActiveChanged(object? sender, EventArgs e)
{
if (IsActive)
{
var streaming = _client.BiStreaming();
var requestStream = streaming.RequestStream;
var responseStream = streaming.ResponseStream;
//Print
Debug.WriteLine($"Duration: {Duration.TotalSeconds} seconds");
Debug.WriteLine("");
await BidirectionalStreamingExample(_client);
}
}
这是我试图调用该方法的地方:
public SettingsView(SequenceEditorService.SequenceEditorServiceClient client)
{
InitializeComponent();
_client = client;
IsActiveChanged += OnIsActiveChanged;
}
IsActiveChanged
是一个事件处理程序,用于检查视图的状态是否发生变化。我使用的正常方法很好,但是一旦我尝试异步它就坏了。
解决方案
您的问题有两种可能的解决方案,因为我们需要知道IsActiveChanged
-event 具有哪种返回类型。void
根据 BCL 指南,通常事件应该没有返回类型 ( ),但这种可能性仍然存在。
可能的解决方案:
- 您必须返回一个
Task
(如上所述非常不可能) - 将
OnIsActiveChanged
的返回类型设置为void
(可能是解决方案,因为IsActiveChanged
可能是 Microsoft 编码的事件,因此符合 BCL 指南)
将第二种解决方案应用于您的代码时,OnIsActiveChanged
的签名应如下所示:
public async void OnIsActiveChanged(object sender, EventArgs e)
推荐阅读
- flutter - 从flutter集成测试中获取当前项目目录
- c# - 可以由调用者自定义的通用谓词?
- azure - ADS 2019:如何创建与 Azure 存储模拟器的服务连接?
- php - cPanel 电子邮件过滤器管道到未执行的程序
- python - 当我运行工人时,芹菜 CELERY_DEFAULT_EXCHANGE_TYPE 不起作用
- r - ggplot比例条填充分类变量得到错误消息
- vim - 在 vim 中设置“后备”文件类型
- youcompleteme - YouCompleteMe 完成失败
- r - R:如何处理不想消失的替换字符
- css - 在 CSS 中,带逗号的 box-shadow 表示什么?