几个月前我开始编程,所以我是一个纯粹的初学者 但是我需要一个带有重概率计算的数学应用程序和一个用于查看/交互的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();
}
)
);
}
}
答案 0 :(得分:4)
你肯定是在非UI线程中进行了紧缩,但是添加了数以亿计的代表来调用 UI线程中的 ...所以你的用户界面太忙了。
所有您的工作目前基本上都在UI线程中进行 - 您甚至不在后台线程中计算rng.NextDouble()
。
另请注意,您有一个没有async
表达式的await
方法,它应该触发编译器警告 - 您应该注意这一点。
您说您不想使用“后台任务” - 但这正是您 正在做的事情,只需拨打Task.Run
。
现在我假设你的真正的代码实际上并不需要创建随机数。您的真实的计算代码是什么样的,以及它出现在哪个线程中?