Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待不起作用_C#_Winforms_Async Await - Fatal编程技术网

C# 等待不起作用

C# 等待不起作用,c#,winforms,async-await,C#,Winforms,Async Await,当我尝试调试这个应用程序时,下面的代码将被阻塞 await Task.Delay(TimeSpan.FromSeconds(1.5)); 在WinForm应用程序中 在控制台应用程序中,它运行良好。有没有人知道是什么原因造成的以及如何解决 public partial class Form1 : Form { public Form1() { InitializeComponent(); Run().Wait(); } publ

当我尝试调试这个应用程序时,下面的代码将被阻塞

await Task.Delay(TimeSpan.FromSeconds(1.5));
在WinForm应用程序中

在控制台应用程序中,它运行良好。有没有人知道是什么原因造成的以及如何解决

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Run().Wait();
    }

    public async Task Run()
    {
        await Run2();
    }

    public static async Task<bool> Run2()
    {
        var task = Task.FromResult(true);
        await Task.Delay(TimeSpan.FromSeconds(1.5));
        return await task;
    }
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
Run().Wait();
}
公共异步任务运行()
{
等待Run2();
}
公共静态异步任务Run2()
{
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}
}
参考:

在控制台应用程序中,它运行良好。有人知道这是什么原因吗

注意:不要混合使用块代码和异步代码

异常:控制台主方法

“一路异步”意味着您不应该混合使用同步和 没有仔细考虑后果的异步代码。在里面 特别是,通过调用 Task.Wait或Task.Result


如何解决呢

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Run().Wait();
    }

    public async Task Run()
    {
        await Run2();
    }

    public static async Task<bool> Run2()
    {
        var task = Task.FromResult(true);
        await Task.Delay(TimeSpan.FromSeconds(1.5));
        return await task;
    }
}
使用异步事件处理程序

public Form1() {
    InitializeComponent();
    this.Load += Loaded;
}

public async void Loaded(object sender, EventArgs args) {

    await Run();//Non blocking thread
}

public async Task Run() {
    await Run2();
}

public static async Task<bool> Run2() {
    var task = Task.FromResult(true);
    await Task.Delay(TimeSpan.FromSeconds(1.5));
    return await task;
}
public Form1(){
初始化组件();
此.Load+=已加载;
}
已加载公共异步void(对象发送方、事件args args){
等待运行();//非阻塞线程
}
公共异步任务运行(){
等待Run2();
}
公共静态异步任务Run2(){
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}
参考:

在控制台应用程序中,它运行良好。有人知道这是什么原因吗

注意:不要混合使用块代码和异步代码

异常:控制台主方法

“一路异步”意味着您不应该混合使用同步和 没有仔细考虑后果的异步代码。在里面 特别是,通过调用 Task.Wait或Task.Result


如何解决呢

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Run().Wait();
    }

    public async Task Run()
    {
        await Run2();
    }

    public static async Task<bool> Run2()
    {
        var task = Task.FromResult(true);
        await Task.Delay(TimeSpan.FromSeconds(1.5));
        return await task;
    }
}
使用异步事件处理程序

public Form1() {
    InitializeComponent();
    this.Load += Loaded;
}

public async void Loaded(object sender, EventArgs args) {

    await Run();//Non blocking thread
}

public async Task Run() {
    await Run2();
}

public static async Task<bool> Run2() {
    var task = Task.FromResult(true);
    await Task.Delay(TimeSpan.FromSeconds(1.5));
    return await task;
}
public Form1(){
初始化组件();
此.Load+=已加载;
}
已加载公共异步void(对象发送方、事件args args){
等待运行();//非阻塞线程
}
公共异步任务运行(){
等待Run2();
}
公共静态异步任务Run2(){
var task=task.FromResult(true);
等待任务延迟(时间跨度从秒(1.5));
返回等待任务;
}

“以下代码”。我猜你的意思是“我希望执行的下一行是……”。什么之后?调试时您看到了什么?我希望在
await Run2()之后返回表单构造函数,因为
await
会立即返回?为什么人们产生线程/任务只是为了立即阻止?@oerkelens它的意思是,当你调试时,它就停在那一行。@MickyD这是为了测试。例如,在真实环境中,我们需要异步初始化数据库或任何东西。
我们需要异步初始化数据库或任何东西。
-请参阅我的博客“下面的代码”。我猜你的意思是“我希望执行的下一行是……”。什么之后?调试时您看到了什么?我希望在
await Run2()之后返回表单构造函数,因为
await
会立即返回?为什么人们产生线程/任务只是为了立即阻止?@oerkelens它的意思是,当你调试时,它就停在那一行。@MickyD这是为了测试。例如,在真实环境中,我们需要异步初始化数据库或任何东西。
我们需要异步初始化数据库或任何东西。
-请参阅我的博客。