C# BeginInvoke in BackgroundWorker,获取对象属性值

C# BeginInvoke in BackgroundWorker, get object property value

我在 WinForm 上有一个 trackbar。我正在 BackgroundWorker 执行一些操作。我正在使用 BeginInvoke 访问 UI 元素。现在我可以使用以下方法轻松设置 trackbar 值:

trackbar.BeginInvoke((Action)(() => trackbar.Value = 50)).

如何使用 BackgroundWorker 中的 BeginInvoke 获取轨迹栏当前值?

length = trackbar.BeginInvoke((Action)(() => trackbar.Value)) 不编译。

trackbar.BeginInvoke((Action)(() => length = trackbar.Value)) 编译但不工作。

任何帮助将不胜感激。

你不能用 BeginInvoke 来做到这一点,因为它所做的是在内部发布消息(字面意思是 PostMessage)并且 returns 不处理它。

您需要改用 Invoke,它会发送消息、处理消息,然后才恢复您的功能:

int length;
trackbar.Invoke((Action)(() => length = trackbar.Value));

不言而喻,这种紧循环中的代码会降低您的性能。小心使用Invoke