![](/img/trans.png)
[英]What is the Xamarin Forms equivalent of Dispatcher.PushFrame?
[英]Doing synchronous calls when dispatcher's PushFrame is used
我正在为.Net WPF应用程序开发一个插件,该插件使用帧推送技术来实现“负责任的” UI。 SDK中的每个长期运行的任务都调用以下代码:
public static void Wait(Task task)
{
DispatcherFrame nestedFrame = new DispatcherFrame();
task.ContinueWith(delegate { return nestedFrame.Continue = false; });
Dispatcher.PushFrame(nestedFrame);
task.Wait();
}
因此,典型的SDK方法可以通过以下代码进行仿真:
private void SdkMethod()
{
var t = Task.Factory.StartNew(() =>
{
Thread.Sleep(1500);
});
Wait(t);
}
当我无法从UI线程对SDK方法进行两次同步调用时,会导致这种情况:
private void OnClick(object sender, RoutedEventArgs e)
{
this.sdk.SdkMethod();
this.sdk.SdkMethod();
}
在这种情况下是否有任何方法可以同步呼叫? 我不能修改SDK,只能自己调用。
如果我从阅读帖子和评论中正确理解,则希望调用SdkMethod并使其同步执行。 调用它时不会通知您何时完成。
如果这是一个无效方法并且不是任务,那么您将不会得到任何回报。 我试图听Dispatcher Hooks的完成,但这没有帮助。
我将创建一个具有Task.Delay的aysnc Task方法,然后在两次调用之间等待它。 这样,您就不会打断用户,但是您仍然可以强制暂停调用,直到调用第二个方法为止。
private void OnClick(object sender, RoutedEventArgs e)
{
this.sdk.SdkMethod();
await DelayAsync(3).ConfigureAwait(false);
this.sdk.SdkMethod();
}
private async Task DelayAsync(int seconds)
{
await Task.Delay(seconds * 1000).ConfigureAwait(false);
}
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.