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

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

概述我创建了一个小型C#应用程序,它应该异步地从 XML文件中提取所有值.问题是..它不是异步的,我无法看到我出错的地方.当单击按钮时,UI冻结,应用程序无法移动等,显示它同步运行的所有迹象. 谁能明白为什么会这样? private async void parseAndExportBtn_Click(object sender, EventArgs e){ progressBar1.Mar 我创建了一个小型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并等待关键字.

总结

以上是内存溢出为你收集整理的C#app应该是异步的,但UI仍然会冻结全部内容,希望文章能够帮你解决C#app应该是异步的,但UI仍然会冻结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存