C# 在SynchronizationContext中将多个参数传递给SendOrPostCallback

C# 在SynchronizationContext中将多个参数传递给SendOrPostCallback,c#,multithreading,lambda,synchronizationcontext,C#,Multithreading,Lambda,Synchronizationcontext,这与我上一篇文章有关,我问为什么我应该在主UI窗体上使用SynchronizationContext的.Send或.post,而不是常规的.Invoke或.BeginInvoke 我的问题是,我用于Invoke的委托与一个具有两个参数的方法相关联:一个字符串包含标签应更改为的实际文本,另一个字符串包含其文本应更改的标签名称 现在的问题是.Send和.Post仅将SendOrPostCallbake委托作为其输入,并且该委托只能与具有单个对象作为其参数的方法相关联。由于所有内容都可以打包到一个对象

这与我上一篇文章有关,我问为什么我应该在主UI窗体上使用SynchronizationContext的.Send或.post,而不是常规的.Invoke或.BeginInvoke

我的问题是,我用于Invoke的委托与一个具有两个参数的方法相关联:一个字符串包含标签应更改为的实际文本,另一个字符串包含其文本应更改的标签名称

现在的问题是.Send和.Post仅将SendOrPostCallbake委托作为其输入,并且该委托只能与具有单个对象作为其参数的方法相关联。由于所有内容都可以打包到一个对象中,所以建议我要么创建一个类来打包变量(我知道如何实现该选项),要么使用lambda表达式和闭包。我不知道该怎么做才是后者

如果我的基础方法有两个字符串参数,请提供有关如何在_synch.Send()中使用lambda表达式的任何指导,我们将不胜感激


编辑。根据评论中的指导,我能够回答自己的问题。为了未来访问者的利益,我在下面发布了解决方案。

根据评论中提供的指导,我编写了以下解决方案

在主UI类中:

public SynchronizationContext UISynchContext { get; private set; }
public static MainForm Get { get; private set; }

public MainForm()
{
    InitializeComponent();
    Get = this;
    UISynchContext = SynchronizationContext.Current;
}

public void UpdateText(string labelName, string text)
{
    var label = (Label)Controls.Find(labelName, true).FirstOrDefault();
    if (label != null) label.Text = text;
}
工人阶级:

private readonly SynchronizationContext _uiSynch;

public Worker(UpdateValueCallback updateValueCallback, Player player)
{
    _uiSynch = MainForm.Get.UISynchContext;
}

_uiSynch.Send(o =>
{
    string labelName = "lbOne";
    string labelText = methodThatReturnsNewText();

    MainForm.Get.UpdateText(labelName, labelText);
}, null);

那么,当你对这个主题进行基础研究时,你不明白你发现了什么?有大量关于闭包的信息随时可用。@Servy让我们以这个资源为例:。我不明白lambda表达式将如何使我不必创建一个全新的类来存储我的两个字符串(如示例中的Person类)。如果可以关闭这两个实例,为什么需要创建一个全新的类型来存储它们,如该示例中所示?请注意,
p
在该示例中未关闭;这就是参数
id
是封闭变量。@对不起,我真的很困惑。如果班上的人不存在,他怎么能写
委托人(p)
。@Servy公平地说,如果我知道我问题的答案,或者认为这是直接解决的,我就不会在这里首先问这个问题。此外,我不是直接询问如何关闭两个变量,而是询问如何使用lambdas作为.Send的一部分,以便在另一个类/线程上与我的UI通信。我不认为当人们面对一个他们不知道如何解决的问题时,应该劝阻他们提问。毕竟,这个论坛的存在是为了传播知识。