使用C#XAML中的按钮保存数据

时间:2016-01-15 16:01:56

标签: c# xaml visual-studio-2015

我想编写一个小的本地数据库。我有一个写有不同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);
    };
}

但这也行不通。有人可以帮帮我吗?

1 个答案:

答案 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));
    }