C# 递归调用:糟糕的风格?

C# 递归调用:糟糕的风格?,c#,winforms,invoke,C#,Winforms,Invoke,下面是一个相当可怕的模式,我有时用它来做简单的调用。这个密码让我有点内疚,尽管我不知道为什么。这可怕吗?合理吗?以后会在我脸上爆炸吗 public void myMethod(object args) { if (InvokeRequired) { Invoke(new MethodInvoker(delegate { myMethod(args); })); return; }

下面是一个相当可怕的模式,我有时用它来做简单的调用。这个密码让我有点内疚,尽管我不知道为什么。这可怕吗?合理吗?以后会在我脸上爆炸吗

public void myMethod(object args)
{
    if (InvokeRequired)
    {
        Invoke(new MethodInvoker(delegate
        {
            myMethod(args);
        }));
        return;
    }
    //Do Stuff
}

这是确保使用UI线程的同步上下文运行方法的一种非常常见的方法。这没什么错


(顺便说一句,这是.NET中的惯例,所以我将其改为
MyMethod
。鉴于这个问题是关于风格的,我觉得这值得一提。)

没问题。一切都在一个地方。易于理解。

我更喜欢这种方式:调用(新操作(myMethod))//我觉得可读性更好。@Homam:当函数名
Invoke
与参数类型
MethodInvoker
如此清晰地匹配时,我觉得我做得很好。我认为Eric Lippert说从调用方使用异步是更好的风格。当然,在您发布此答案时,这不是一个选项。