我正在尝试制作一个WritingAnimator,但是当我运行它时会冻结UI ... 这是我做的:
public partial class Tsia : Form
{
[...]
private void TypeText()
{
WritingAnimator("Some text");
WritingAnimator("This is another text");
}
private void WritingAnimator(string text)
{
foreach (char c in text)
{
TextBox1.AppendText(c.ToString());
Thread.Sleep(100);
}
}
}
所以我在Google上搜索了一下,我发现了一种避免使用其他线程冻结UI的方法:
public partial class Tsia : Form
{
[...]
private void TypeText()
{
WritingAnimator("Some text");
WritingAnimator("This is another text");
}
private async void WritingAnimator(string text)
{
foreach (char c in text)
{
TextBox1.AppendText(c.ToString());
await Task.Delay(100);
}
}
}
但它输入类似于“Some text”和“This is another text”的东西,因为WritingAnimator(“这是另一个文本”);不要等待WritingAnimator的结束(“Some text”); ...
我该如何解决?
答案 0 :(得分:0)
await
“所以我在谷歌搜索,我发现了一种避免冻结用户界面的方法 使用其他线程“
async
/ Task.Delay
是 C#语言功能,因为版本5和CancellationToken
是任务并行库的一部分( TPL)即可。整个TPL + async / await功能简化了开发人员对异步的使用。
还有两个想法:
using (FileStream fs = File.OpenRead(binarySourceFile.Path))
using (BinaryReader reader = new BinaryReader(fs))
{
// Read in all pairs.
while (reader.BaseStream.Position != reader.BaseStream.Length)
{
Item item = new Item();
item.UniqueId = reader.ReadString();
item.StringUnique = reader.ReadString();
result.Add(item);
}
}
return result;
。