防止GUI冻结并启用文件读取

时间:2016-06-05 19:31:21

标签: c# wpf

所以我有一个学术项目,我会做很多计算并将输出放到WPF textBox。现在我真的不精通MVVM,我认为这是解决这个问题的正确方法,但我不是在寻找MVVM解决方案,因为代码结构无关紧要,只有输出很重要。

所以我需要对远程文件进行一些计算,这就是我将输出放到textBox的方式:

private void btnParse_Click(object sender, RoutedEventArgs e)
{
    int geTimerDelay = int.Parse(txtDelay.Text);
    string ex = "";
    Task.Factory.StartNew(() =>
    {
        //access the URLs in a suitable interval and process data

        File.WriteAllText("data.txt",rootObject.timeSinceStartup.ToString());
    });

        Task.Factory.StartNew(() =>
    {
        //access the URLs in a suitable interval and process data

        File.WriteAllText("data2.txt",rootObject.timeSinceStartup.ToString());
    });

    ...

    string ex = File.ReadAllText("data.txt") + "/n" + File.ReadAllText("data2.txt") ... ;
    txtOut.Text = ex;
}

现在有没有保证只在生成所有必要文件后才会填充我的textBox?如果不是我怎么能这样做(再次冻结界面!)

是否有更简单和优雅的方式(再次,我没有MVVM背景,它只是学术代码:()?

事实是我需要每隔几秒运行一次子程序并更新textBox。

感谢。

1 个答案:

答案 0 :(得分:1)

不,没有这样的保证。为什么不把所有功能都放在一个任务中呢?

Task.Factory.StartNew(() =>
{
    //access the URLs in a suitable interval and process data

    File.WriteAllText("data.txt",rootObject.timeSinceStartup.ToString());

    //access the URLs in a suitable interval and process data

    File.WriteAllText("data2.txt",rootObject.timeSinceStartup.ToString());
    string ex = File.ReadAllText("data.txt") + "/n" + File.ReadAllText("data2.txt")... ;

    txtOut.Text = ex;    
});

您需要通过查找如何从非UI线程更新UI来纠正txtOut.Text分配。