我想编写一个小的本地数据库。我有一个写有不同TextBlocks的表单。在文本块中输入文本后,我会按一个按钮将数据保存到文本文件中。
所以我尝试使用以下代码:
private void button_Click(object sender, RoutedEventArgs e)
{
string x = textBox.Text;
string p = "J:\\test.txt";
File.WriteAllText(p, x);
}
现在我的问题是每次VS2015都会写回错误: 不应在UI线程上执行同步操作 所以我尝试了这个:
private async void button_Click(object sender, RoutedEventArgs e)
{
string x = textBox.Text;
string p = "J:\\test.txt";
await WriteTextAsync(p,x);
}
private async Task WriteTextAsync(string filePath, string text)
{
byte[] encodedText = Encoding.Unicode.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};
}
但这也行不通。有人可以帮帮我吗?
答案 0 :(得分:1)
按原样走下异步/等待路由 - 我只需将您选择的File.WriteAllText更改为StreamWriter:
private async void button_Click(object sender, RoutedEventArgs e)
{
string x = textBox.Text;
string p = "J:\\test.txt";
using (FileStream fs = new FileStream(p, FileMode.Append))
using (StreamWriter sw = new StreamWriter(fs))
await sw.WriteLineAsync(x);
}
给它一个去看看你是否得到不同的结果
您还可以按照使用Task.Run进行换行的建议,然后返回原始方法
private void button_Click(object sender, RoutedEventArgs e)
{
string x = textBox.Text;
string p = "C:\\test.txt";
Task.Run(() => File.WriteAllText(p, x));
}