加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#app应该是异步的,但UI仍然会冻结

发布时间:2020-12-16 09:47:40 所属栏目:百科 来源:网络整理
导读:我创建了一个小型C#应用程序,它应该异步地从 XML文件中提取所有值.问题是..它不是异步的,我无法看到我出错的地方.当单击按钮时,UI冻结,应用程序无法移动等,显示它同步运行的所有迹象. 谁能明白为什么会这样? private async void parseAndExportBtn_Click(ob
我创建了一个小型C#应用程序,它应该异步地从 XML文件中提取所有值.问题是..它不是异步的,我无法看到我出错的地方.当单击按钮时,UI冻结,应用程序无法移动等,显示它同步运行的所有迹象.

谁能明白为什么会这样?

private async void parseAndExportBtn_Click(object sender,EventArgs e)
{
    progressBar1.MarqueeAnimationSpeed = 100;
    parseAndExportBtn.Enabled = false;
    selectDirectoryBtn.Enabled = false;
    status.Text = "Started searching files...";
    await SearchFiles(selectTxcDirectory.SelectedPath);
    status.Text = "Finished searching files";
}

private static async Task SearchFiles(string path)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(path + "/cen_18-2_-1-y11.xml");

    using (XmlReader r = XmlReader.Create(new StringReader(xmlDoc.InnerXml),new XmlReaderSettings() { Async = true }))
    {
        while (await r.ReadAsync())
        {
            switch (r.NodeType)
            {
                case XmlNodeType.Text:
                    Console.WriteLine(await r.GetValueAsync());
                    break;
            }
        }
    }
}

解决方法

在任务中调用SearchFiles(字符串路径).如下.

private void parseAndExportBtn_Click(object sender,EventArgs e)
{
    progressBar1.MarqueeAnimationSpeed = 100;
    parseAndExportBtn.Enabled = false;
    selectDirectoryBtn.Enabled = false;
    status.Text = "Started searching files...";

    Task t = Task.Run(() => SearchFiles(selectTxcDirectory.SelectedPath));

    status.Text = "Finished searching files";
}

我建议您在异步上等待read this article并等待关键字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读