gpt4 book ai didi

vb.net - 将 Async CTP Await 与事件一起使用?

转载 作者:行者123 更新时间:2023-11-30 23:46:45 26 4
gpt4 key购买 nike

与 Silverlight 5/Async CTP 相关

我想创建一个异步函数来启动布局更新,然后等待布局更新完成。就像是:

    Private Async Function UpdateLayoutRoot() As Task
LayoutRoot.UpdateLayout()
Await LayoutRoot.LayoutUpdated <--- (NOT valid but shows desired outcome)
End Function

如何才能做到这一点?更一般地说,您如何使用 Await 来等待现有事件?

最佳答案

实现此目的的一种方法是等待 TaskCompletionSource这是在事件内设置的。我不知道 VB.NET,希望你能从 C# 理解它:

// The type and value returned by the TaskCompletionSource
// doesn't matter, so I just picked int.
TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();

// The delegate sets the TaskCompletionSource -- the result value
// doesn't matter, we only care about setting it. Keep hold of
// the delegate so it can be removed later.
EventHandler d = (o, e) => { tcs.TrySetResult(1); };

LayoutRoot.LayoutUpdate += d;

try
{
LayoutRoot.UpdateLayout();
await tcs.Task;
}
finally
{
// Don't leak the delegate!
LayoutRoot.LayoutUpdate -= d;
}

关于vb.net - 将 Async CTP Await 与事件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com