使用control.begininvoke后,UI仍然没有响应

我做了一个C#winforms应用程序。 现在我有一个有很多按钮的表单,它调用了大量的数字运算函数,其输出我在文本框中更新。 我调用textbox.begininvoke()方法,我将委托传递给更新文本框中文本的函数,但是当文本很大时,表单没有响应,因为我无法单击取消按钮。 没有任何办法可以使整个表格保持响应,并且更新也会不断发生。 我必须向用户显示数据,因为它即将到来,我无法缓冲整个事情并最终显示。 我还尝试实现自己的缓冲区并以特定的时间间隔显示数据,这对于少量文本很有用,但是大量的UI只是没有响应。 任何帮助? 谢谢

随着一些混乱的出现而更新问题

  • 我在一个单独的线程上调用了数字运算function。
  • 只要数据到达以更新文本框,该数字运算函数就会调用control.begininvoke函数
  • 我的UI会显示,我看到输出即将到来,但是当数据很大时,我无法做任何其他活动,虽然我仍然可以看到UI

你倒退了。

您应该使用BeginInvoke来更新UI。 它似乎不会产生一个新的线程,你似乎相信。

BeginInvoke只是“在最初创建控件的线程中执行以下内容”,这是您的UI线程。

因此,您应该在数字运算线程中使用BeginInvoke将更新回发到UI中。

希望这可以帮助

具有更新文本框的function可以逐个执行,并在每次更新之间调用DoEvents 。 也就是说,分解字符串并……

 update piece 1 DoEvents update piece 2 DoEvents ... update piece n