C# 从自定义Xamarin.Forms视图调用本机异步方法

C# 从自定义Xamarin.Forms视图调用本机异步方法,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我知道从Xamarin.Forms视图调用本机API的推荐方法是创建一个带有“请求的”名称后缀的事件,然后从渲染器处理它。例如,这在for滚动到中使用 然而,在我的例子中,我想调用一个本机API,它不仅返回数据,而且还基于异步 一个很好的例子是UWPWebView控件,它有InvokeScriptAsync方法,该方法是异步的,并返回IAsyncOperation 如果我直接按照正常的建议行事,我可以找到一位代表,如: delegate Task<string> InvokeScri

我知道从Xamarin.Forms视图调用本机API的推荐方法是创建一个带有“请求的”名称后缀的事件,然后从
渲染器处理它。例如,这在for
滚动到
中使用

然而,在我的例子中,我想调用一个本机API,它不仅返回数据,而且还基于异步

一个很好的例子是UWP
WebView
控件,它有
InvokeScriptAsync
方法,该方法是异步的,并返回
IAsyncOperation

如果我直接按照正常的建议行事,我可以找到一位代表,如:

delegate Task<string> InvokeScriptRequestedHandler();

event InvokeScriptRequestedHandler InvokeScriptRequested;
委托任务invokeScriptRequestHandler();
事件InvokeScriptRequestedHandler InvokeScriptRequested;
并在Xamarin.Forms自定义视图中使用以下内容:

public async Task<string> InvokeScriptAsync()
{
    var handler = InvokeScriptRequested;
    if (handler != null)
    {
        return await handler.Invoke();
    }
    return null;
}
public异步任务InvokeScriptAsync()
{
var handler=InvokeScriptRequested;
if(处理程序!=null)
{
return wait handler.Invoke();
}
返回null;
}
这实际上可以很好地工作,但是对于一个事件来说,返回一个值已经很不寻常了,如果它是一个
任务
,则更是如此


有没有最佳实践来处理这种情况?

困惑…
InvokeScriptAsync
不是一个事件,那么为什么要尝试用一个事件来包装呢?在自定义窗体的视图中公开它并调用它(必要时通过OnPlatform)。假设我在中定义了自定义WebView控件。Net标准库,我将如何调用此本机UWP WebView方法?