小编R. *_*ats的帖子

是否可以等待 Device.BeginInvokeOnMainThread 代码完成(使用 UI 调用的结果继续后台工作)

在我的代码中,我有一个名为“ShowMessageBoxAsync”的任务。我想使用此代码向用户显示(并等待)DisplayAlert 并返回结果。像这样: var messageBoxResult = await View.ShowMessageBoxAsync("这是一个错误");

ShowMessageBoxAsync 的代码是:

public async System.Threading.Tasks.Task<bool> ShowMessageBoxAsync(string message)
{
    var result = false;
    Device.BeginInvokeOnMainThread(async () =>
    {
        result = await DisplayAlert("Error", message, "OK", "Cancel");
    });
    return result;
}
Run Code Online (Sandbox Code Playgroud)

在我添加 Device.BeginInvokeOnMainThread 之前,该任务给了我一个异常,表明它没有在主/UI 线程上运行。所以添加了BeginInvokeOnMainThread后,就开始正常工作了。然而,问题在于代码直接转到结果,而不是等待“await DisplayAlert”的结果。

只有在 Device.BeginInvokeOnMainThread 代码完成后才可能返回“result”的值吗?

我对此做了一些研究,有人建议使用 TaskCompletionSource,但这会阻止 UI 线程并且 DisplayAlert 根本不显示。

c# asynchronous async-await xamarin.forms

3
推荐指数
2
解决办法
3227
查看次数

在 blazor 应用程序中,如果渲染模式设置为“服务器”,是否可以获得请求的路径?

我创建了一个 Blazor 客户端应用程序,在该应用程序中,我有许多具有自定义要求和处理程序的授权策略。其中之一检查URL中请求的ID并检查登录用户是否可以查看该资源。

\n\n

例如,通过客户端,用户导航到https://localhost/resource/1f28e41c-bc75-44d6-9eef-d46b66b649c7 ,这是我的 API 上的资源。

\n\n

I\xe2\x80\x99m 使用以下代码查看请求路径:

\n\n
var httpContext = _httpContextAccessor.HttpContext;\nstring requestedPath = httpContext.Request.Path.ToString();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这曾经有效,requestedPath 确实包含值 \xe2\x80\x9c1f28e41c-bc75-44d6-9eef-d46b66b649c7\xe2\x80\x9d

\n\n

但是,在 _Host.cshtml 中,我已将渲染模式从“ServerPrerendered”更改为“Server”。这是因为在页面调用期间代码在不同位置执行了两次。

\n\n

由于我更改了此设置,requestedPath 值始终为“/_blazor”。

\n\n

所以我想知道,在 blazor 应用程序中,如果渲染模式设置为“服务器”,是否可以获得请求的路径?

\n

c# httpcontext blazor

3
推荐指数
1
解决办法
1246
查看次数