0

几个月前我才开始编程,所以我是一个纯粹的初学者,但我需要一个具有高概率计算的数学应用程序和一个用于查看/交互的 UI,所以我四处搜索,发现 C#.net 是最好的方式......强大的力量...... .

如果我能够做到这一点,它将帮助我取得很大进步:

带有文本框的 Wpf 窗口,在文本框中,每次计算完成时都会打印一个数字,但 Ui 应该每次都响应

我尝试使用最新的 net 4.5 来做到这一点,因为应用程序需要快速(所以使用最新的技术而不是计时器或后台任务

它可以工作,但 Ui 被卡住并且无法移动(因为我认为我无法访问文本框)

如果大家可以帮助我,那就太好了,我感谢大家,因为我从你的帖子中学到了很多东西!

这是我错误的新手代码

private Random rng;
public MainWindow()
{
    rng = new Random();
    InitializeComponent();
    Task.Run((Func<Task>) Calc);
}
private async Task Calc()
{
    while (true)
    {
        textBox1.Dispatcher.Invoke
             (DispatcherPriority.Normal
              , new Action(delegate() 
                 { 
                     textBox1.Text = rng.NextDouble().ToString(); 
                 }
                          )
              );
    }
}
4

1 回答 1

4

诚然,在非 UI 线程中,您正在紧密循环,但是UI 线程中添加了要调用的大量委托……所以您的 UI 太忙了。

目前,您所有的工作基本上都在 UI 线程中进行 - 您甚至没有rng.NextDouble()在后台线程中进行计算。

另请注意,您有一个async没有await表达式的方法,它应该触发编译器警告 - 您应该注意这一点。

您说您不想使用“后台任务”-但这正是您通过调用Task.Run.

现在我假设您的真实代码实际上并不只需要创建随机数。你真正的计算代码是什么样的,它发生在哪个线程中?

于 2012-06-20T12:52:43.640 回答