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并等待关键字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |