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中使用循环和下行计数器,而不是递归,或者一个计时器坏主意,事实上在这里几乎没有醒着,尽管这取决于你做什么。