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
!
我在 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
!