C# 我怎样才能每2秒调用函数10次,并在返回true后退出?

C# 我怎样才能每2秒调用函数10次,并在返回true后退出?,c#,C#,我正在使用以下内容,只是为了测试 public bool Retry(int numberOfRetries, Action method) { if (numberOfRetries > 0) { try { method(); return true; } catch (Excep

我正在使用以下内容,只是为了测试

    public bool Retry(int numberOfRetries, Action method)
    {
        if (numberOfRetries > 0)
        {
            try
            {
                method();
                return true;
            }
            catch (Exception e)
            {
                LogException(e);                   
                Thread.Sleep(2000);
                // retry
                return Retry(--numberOfRetries, method);
            }
        }
        return false;
    }

         public void showMessage()
    {
        bool result = false;
        //result = true;
        if (result)
        {
            MessageBox.Show("reached ", "reached", MessageBoxButtons.OKCancel);
            result = true;
        }
        return result;
    }
我通过以下方式称之为:

    private void button4_Click(object sender, EventArgs e)
    {

        Retry(10, showMessage);        
    }
但是它在button4_Click事件中说showMessage返回的类型是错误的? 我想做的是每2秒调用函数showMessage 10次,一旦它为真,就退出。 我强迫它为false,因为我正在调试,希望看到它实际上每2秒调用它10次 因此,基本上我尝试实现一些重试逻辑调用一个函数,该函数返回一个bool,并进行多次尝试,如果失败,则退出

对此有什么想法吗?

showMessage方法的返回类型为void,但您正在尝试返回bool。相反,使用公共boolshowmessage。定义为void的方法不能返回任何内容

另一件需要注意的事情是,您永远不会为了重试而到达catch块,因为代码中没有任何内容会引发异常。因此,Retry只执行一次,并返回true。相反,尝试可能会是这样的:

尝试 { var结果=方法; 如果!结果 { 抛出新异常方法返回false; } return true;//仅当方法返回true时执行 } 编辑:


您还需要将操作方法更改为Func方法。操作可以接受零个或多个参数,但其返回类型必须为void。Func有一个返回类型和零个或多个参数。

使用计时器和下行计数器。因此不建议进行上述尝试?您的问题是您将showMessage声明为void,但您返回的是boolah yes。很明显thanks@Abbey您还可以在Task.Delay中使用循环和下行计数器,而不是递归,或者一个计时器坏主意,事实上在这里几乎没有醒着,尽管这取决于你做什么。