参数化动作调用委托
Parameterized Action Invoke Delegate
我有以下工作代码示例:
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;});
我遇到的问题是如何在函数中使用参数,在本例中为 control
和 text
。
注意:方法可以是任何东西。我关心的是概念,而不是方法的作用。这只是我想到的第一件事。
Visual Studio 抱怨很明显,即我没有在方法中使用参数。
我已经知道如何使用 Actions
,如 this 答案所示。让我失望的是 Invoke
和 delegate
部分。
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;
}
不需要在实际调用中包含 delegate
转换。
参数进入 Invoke
方法的第二个参数,是一个 params
对象数组,这里包含 control
和 text
.
public void SetControlText(Control control, string text)
=> this.Invoke((Action<Control, string>)((ctrl, txt) => ctrl.Text = txt), control, text);
我有以下工作代码示例:
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;});
我遇到的问题是如何在函数中使用参数,在本例中为 control
和 text
。
注意:方法可以是任何东西。我关心的是概念,而不是方法的作用。这只是我想到的第一件事。
Visual Studio 抱怨很明显,即我没有在方法中使用参数。
我已经知道如何使用 Actions
,如 this 答案所示。让我失望的是 Invoke
和 delegate
部分。
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;
}
不需要在实际调用中包含 delegate
转换。
参数进入 Invoke
方法的第二个参数,是一个 params
对象数组,这里包含 control
和 text
.
public void SetControlText(Control control, string text)
=> this.Invoke((Action<Control, string>)((ctrl, txt) => ctrl.Text = txt), control, text);