C# 表格获胜的原因';t快速离开,可能是等待功能的原因?

C# 表格获胜的原因';t快速离开,可能是等待功能的原因?,c#,asynchronous,async-await,C#,Asynchronous,Async Await,您好,我有以下代码: await Task.Run(() => SomeLongRunningMethod()); if (dataGridViewExt1.Rows.Count > 0) { Log.log("Bringing in items"); BringItemsIntoSystem(); this.Close(); } else { MessageBox.Show("No items to bring in", "Complete", Me

您好,我有以下代码:

await Task.Run(() => SomeLongRunningMethod());
if (dataGridViewExt1.Rows.Count > 0)
{
    Log.log("Bringing in items");
    BringItemsIntoSystem();
    this.Close();
}
else
{
    MessageBox.Show("No items to bring in", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
    Log.log("No items to bring in.");
    this.Close();
}
以下是我的BringItemsIntoSystem()函数:

private void BringItemsIntoSystem()
        {
            try
            {
                for (int q = 0; q < dataGridViewExt1.Rows.Count; q++)
                {
                    Creator.Insert(0);
                    Creator.SetValueByName(0, "Lookup", dataGridViewExt1.Rows[q].Cells["LOOKUP"].Value.ToString());
                    Creator.SetValueByName(0, "Qty", dataGridViewExt1.Rows[q].Cells["Qty"].Value.ToString());
                    Creator.Commit(0);
                    Log.log("Item added: " + dataGridViewExt1.Rows[q].Cells["LOOKUP"].Value.ToString() + " with QTY: " + dataGridViewExt1.Rows[q].Cells["Qty"].Value.ToString());
                }
            }
            catch(Exception arr)
            {
                Log.log(arr.ToString());
                MessageBox.Show(arr.ToString());
            }
        }
wait函数运行并最终完成所述任务。 下面的代码继续执行…而“BringItemsIntoSystem”执行时不会出现任何问题,而且执行速度相当快,可以满足需要

现在,当它到达这个.Close()…时,关闭表单会非常困难

我不完全确定还要寻找什么,因为BringItemsIntoSystem运行良好,没有任何问题

等待函数是否导致问题?我能做些什么来弥补我在关闭表单时遇到的延迟吗

查看日志,BringItemsIntoSystem完成时没有出现任何问题。正如您在后面看到的,它应该正在执行: 这个。关闭()

这不是立刻发生的问题所在,我不知道该如何描述它

我创建的其他项目不使用“wait Task.Run…”,因此我认为这与此有关,但BringItemsIntoSystem工作正常,因此不知道如何证明它

我已将BringItemsIntoSystem()函数替换为一个简单的:

MessageBox.Show(“完成”)

然而,这再次引发了问题

然后我添加了一个按钮,当我单击它时:

这个。关闭()

这几乎就像表单UI在几秒钟后才处于活动状态

确认表单再次激活前有约15秒的延迟,我可以点击复选框

我希望这些新的细节能帮助我解决这个问题


谢谢你的帮助

我认为等待的项目不会阻止在等待项目后执行关闭。我建议把每一项都注释掉,看看是什么阻止了它

此外,它可能只是一个正常的关闭时间,这取决于它当时使用的资源

一个关于异步主题的好参考,可能是一个很好的阅读。

“关闭表单非常困难”——这到底是什么意思?代码没有努力的概念。它要么能做点什么,要么不能。这并不是说你的代码做不到什么,但是在投入了足够的努力之后,突然之间就可以了,但这正是“非常困难的时间”所暗示的。请修复您的问题,使其具有可靠重现问题的良好效果。清楚而准确地说明代码的作用,它与您希望它做的有什么不同,以及您具体需要什么帮助。如果您愿意花时间为我们创建一个。你在做这件事时所付出的努力要么让我们解决它变得微不足道,要么你会一路解决问题。现在你只是得到一个模糊的猜测作为唯一的答案。如果你想要一个正确的答案,那么就努力问一个正确的问题。这不是问题的答案。对问题的回答至少会试图解释观察到的行为(而不是猜测),并提供问题作者可以实施的具体解决方案。以上只是单纯的猜测和额外阅读的建议,内容只适合评论,不是答案。一开始我认为这可能也很正常,但我注意到一个模式,前两次它可能在5秒钟内关闭……第三次它实际上会挂起很长时间。@PeterDuniho你是100%正确的,它比任何答案更像是一个评论。然而,我没有50个代表点来回复评论,所以我选择了我可以选择的路线。“我没有50个代表点来回复评论”——不符合发布评论的资格要求,绝不是滥用堆栈溢出系统的借口,因为发布的内容不是答案。
public void SomeLongRunningMethod()
        {
            while (ContinueScanning != true)
            {
                Log.log("ContinueScanning is set to " + ContinueScanning.ToString());
                ReturnScannedItems();
            }
        }