相关疑难解决方法(0)

即使使用任务,Blazor UI 也会冻结

考虑 Blazor WebAssembly App(ASP.NET Core 托管)“空”项目。我调整了 Counter 页面如下:

<button class="btn btn-primary" @onclick="IncrementCountAsync">Click me</button>
Run Code Online (Sandbox Code Playgroud)

及其 Counter.razor.cs 文件:

public partial class Counter
{
    private static int currentCount = 0;

    private async Task IncrementCountAsync()
    {
        Console.WriteLine("Increment called");

        _ = HeavyComputeAsync();

        currentCount++;

        Console.WriteLine($"Counter = {currentCount}");
    }

    private static Task<int> HeavyComputeAsync()
    {
        return Task.Run(() =>
        {
            Console.WriteLine("Task start");

            for (long ndx = 0; ndx < 1000000; ++ndx)
                ndx.ToString();

            Console.WriteLine("Task end");
            return 0;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我将HeavyComputeAsync方法称为_ = ...,它不应等到IncrementCountAsync方法完成,而应立即更新currentCount …

c# task asp.net-core blazor

4
推荐指数
1
解决办法
3401
查看次数

如何在长时间运行的功能中更新UI(文本字段)?

我知道这个问题可能没有意义,而且我正在努力想办法解释它,所以我将展示一段代码来帮助.我在visual studio express 2010上使用Winforms:

private void button1(object sender, EventArgs e)
    {
        txtOutput.Text += "Auto-collecting variables. This may take several minutes";
        string v = foo();
        txtOutput.Text += "\n" + v;
        string b = bar();
        txtOutput.Text += "\n" + b;

        txtOutput.SelectionStart = txtOutput.Text.Length;
        txtOutput.ScrollToCaret(); //scrolls to the bottom of textbox
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上,当用户点击button1时,我希望"自动收集变量..."显示在文本框中,然后让foo()执行,显示它,然后执行bar(),然后显示.

当前正在发生的是foo()和bar()执行,然后在执行foo()和bar()之后一切都显示(需要几分钟的函数).无论如何要解决这个问题,还是有解决方法?

编辑:C#的版本是4.0.如果我更新到4.5或5.0,没有.NET 4.5/5.0的计算机能够运行.exe吗?

c# .net-4.0 winforms

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

标签 统计

c# ×2

.net-4.0 ×1

asp.net-core ×1

blazor ×1

task ×1

winforms ×1