参数化动作调用委托

问题描述 投票:0回答:1

我有以下工作代码示例:

public void ClearLogText() => this.TxtLog.Invoke((Action)delegate {this.TxtLog.Text = string.Empty;});

如何正确添加参数?

public void SetControlText(Control control, string text) => this.Invoke((Action<Control, string>delegate (Control x, string y) {x.Text = y;});

我的问题是如何在函数中使用参数,在这种情况下为controltext

注意:该方法可以是任何方法。我关心的是概念,而不是方法的作用。这只是想到的第一件事。

Visual Studio抱怨明显,即我没有在方法中使用参数。

我已经知道如何使用Actions,如this答案所示。让我不禁想到的是Invokedelegate部分。

private void NotifyUser(string message, BalloonTip.BalloonType ballType)
{
    Action<string, BalloonTip.BalloonType> act = 
        (m, b) => BalloonTip.ShowBalloon(m, b);

    act(message, ballType);
}

我也想使用结构this.X.Invoke((Action)delegate...将答案保留在一行中,因此是这个问题,否则答案将是:

    public delegate void DelegateSetControlText(Control control, string text);

    public void SetControlText(Control control, string text)
    {
        if (true == this.InvokeRequired)
        {
            Program.DelegateSetControlText d = new Program.DelegateSetControlText(this.SetControlText);
            this.Invoke(d, new object[] { control, text });
        }
        else
            control.Text = text;
    }
c# winforms delegates action invoke
1个回答
0
投票

参数进入Invoke方法的第二个参数,它是params对象数组,此处包含controltext

public void SetControlText(Control control, string text)
    => this.Invoke((Action<Control, string>)((ctrl, txt) => ctrl.Text = txt), control, text);
© www.soinside.com 2019 - 2024. All rights reserved.