在BackgroundWorker中使用C#BeginInvoke,获取对象属性值

时间:2018-07-27 19:39:17

标签: c# multithreading delegates backgroundworker trackbar

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

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

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

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

trackbar.BeginInvoke((Action)(() => length = trackbar.Value))可以编译,但是不起作用。

我们将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

您无法使用BeginInvoke来完成此操作,因为它所做的是它会在内部(字面PostMessage)发布一条消息,并且不进行处理就返回。

您需要改用Invoke,它发送消息,对其进行处理,然后才恢复功能:

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

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