gpt4 book ai didi

c# - 不能调用非委托(delegate)类型

转载 作者:行者123 更新时间:2023-11-30 22:12:53 27 4
gpt4 key购买 nike

我正在尝试使用线程,其中包括一个 GUI Controller ,因此我需要调用该 Controller ,但我遇到了这个问题 - 我无法在这部分代码中调用非委托(delegate)类型

if (toolStripTextBox1.Text != "")
{
if (RT[j].tabvalue.ToString() == tabControl1.Invoke(() =>
{ tabControl1.SelectedTab.Name; }))
{
RT[j].RitchT.Text = getH.getHtmlCode(toolStripTextBox1.Text);
}
}

虽然这是在另一方面工作

tabControl1.Invoke(
() => { tabControl1.TabPages[R.RitchT.Name].Controls.Add(R.RitchT);
});

这是调用类

 public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired)
control.Invoke(new MethodInvoker(action), null);
else
action.Invoke();
}
}

我该如何解决这个问题?

最佳答案

  tabControl1.Invoke(() => { tabControl1.SelectedTab.Name; })

是的,这不是合法的语法。 Control.BeginInvoke() 方法将委托(delegate)作为其第一个参数。 lambda 表达式不会隐式转换为委托(delegate),您必须提供帮助。修复:

  tabControl1.Invoke(new Func<string>(() => { return tabControl1.SelectedTab.Name; }))

您会遇到更多麻烦,您不能在工作线程中分配 RichTextBox 的 Text 属性,您还必须在那里使用 BeginInvoke()。您可以阅读 Text 属性,但这是一个坏主意,它们可能会在工作线程运行并且用户继续操作 UI 时发生变化。您确实想要支持 BackgroundWorker 或 Task,在启动工作人员之前收集您需要的数据,并在完成后使用工作人员的结果更新 UI。

关于c# - 不能调用非委托(delegate)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477710/

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