c# -简单或复杂多线程函数的标准委托

本文关键字:标准 函数 多线程 简单 复杂 | 更新日期: 2023-09-27 18:03:27

c#中是否有标准的委托,我可以使用它来调用。我必须为我必须调用的每个新函数签名声明一个新的委托吗?

现在我只有那些签名。但是如果我可以使用本机委托来处理任何复杂的返回值和参数,那就太好了。

public bool isDone()
{...}
public void doStuff()
{...}
public void doMoreStuff(object o)
{...}
public void doEvenMoreStuff(string str)
{...}
// I'm declaring my "custom" delegates like this:
private delegate bool delegate_bool();
private delegate void delegate_void(string line);
// and calling via
if (InvokeRequired)
    Invoke(new delegate_void(doStuff), new object[] { });
else
    {...}


编辑:答案似乎是Action<>和Func<>。

if (InvokeRequired)
    return Invoke(new Func<bool>(isDone), new object[] { });
else
    {...}
if (InvokeRequired)
    BeginInvoke(new Action(doStuff), new object[] { });
else
    {...}
if (InvokeRequired)
    BeginInvoke(new Action<string>(doEvenMoreStuff), new object[] { "hello world" });
else
    {...}

c# -简单或复杂多线程函数的标准委托

您正在寻找Action<*>Func<*>代表,它们正是这样做的。

Action<>Func<>代表是您应该尽可能使用的"标准"代表。很少有不能使用它们的情况。

特别是如果你有可选参数,refout参数,超过16个参数,或者有params参数,那么你将需要使用另一个(或你自己的自定义)委托。

Action<>和Func<>委托将为您提供所需的内容

是的,您可以使用Action和lambda。例如Dispatcher。Invoke需要委托,但是我们可以将lambda强制转换为Action,因此不需要为它定义新的委托:

Dispatcher.Invoke((Action)delegate() { ... });

Action<>和Func<>可以执行这些类型的任务。

大家都说了。Action和Func会做你想做的。Action应该用于不返回值的方法,如果需要返回值,可以使用Func。