gpt4 book ai didi

c# - 如何访问 UI 线程上的值?

转载 作者:行者123 更新时间:2023-11-30 14:42:41 25 4
gpt4 key购买 nike

通过 BeginInvoke 调用 UI 控件上的操作没有问题,但是,这是一个 void 方法。我需要从文本框中获取一个值以用于不同的线程。

我怎样才能做到这一点?

最佳答案

最简单的解决方案是在闭包中捕获局部变量。

String text;
textBox.Invoke(() => text = textBox.Text);

编译器将生成一些与 chibacity 的解决方案非常相似的代码 - 局部变量成为编译器生成的类的一个字段。

更新

这不起作用 - lambda 表达式不可分配给 Delegate。这个问题可以使用扩展方法来解决。

internal void ExecuteOnOwningThread(this Control control, Action action)
{
if (control.InvokeRequired)
{
control.Invoke(action);
}
else
{
action();
}
}

用法如下。

String text;
textBox.ExecuteOnOwningThread(() => text = textBox.Text);

可以将多个语句填充到 lambda 表达式中。

textBox.ExecuteOnOwningThread(() =>
{
DoStuff();
text = textBox.Text
DoOtherStuff();
});

但是正如 chibacity 已经在评论中提到的那样,显式编写一个方法可能会更好。超过某个点使用 lambda 表达式会对代码的可读性产生不利影响。而且使用lambda表达式当然很容易引入重复代码。

关于c# - 如何访问 UI 线程上的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com