c#在catch语句中暂停不起作用
我有一个c#在catch语句中暂停不起作用,c#,C#,我有一个try/catch块,在catch中我试图应用暂停,但无论我尝试什么方法(暂停、线程睡眠),它都会继续。并忽略主块中的所有暂停。这是一个.NET错误吗 catch (Exception ex) { if (maxDelay < 1) maxDelay = 1; newpause(maxDelay); // Pause(maxDelay * 60); Current = "Error:" + txt; LogUpdater.Update
try/catch
块,在catch中我试图应用暂停,但无论我尝试什么方法(暂停、线程睡眠),它都会继续。并忽略主块中的所有暂停。这是一个.NET错误吗
catch (Exception ex)
{
if (maxDelay < 1)
maxDelay = 1;
newpause(maxDelay);
// Pause(maxDelay * 60);
Current = "Error:" + txt;
LogUpdater.UpdateLog(f, "Error sending : " + txt + ".");
System.Threading.Thread.Sleep(10);
bw.ReportProgress(1);
}
public void newpause(int maxDelay)
{
for (int i = 0; i < 60; i++)
{
System.Threading.Thread.Sleep(maxDelay*1000);
Application.DoEvents();
}
}
catch(异常示例)
{
如果(最大延迟<1)
maxDelay=1;
newpause(maxDelay);
//暂停(最大延迟*60);
Current=“Error:”+txt;
UpdateLog(f,“发送错误:“+txt+”);
系统线程线程睡眠(10);
bw.报告进展情况(1);
}
public void newpause(int maxDelay)
{
对于(int i=0;i<60;i++)
{
系统线程线程睡眠(最大延迟*1000);
Application.DoEvents();
}
}
你过去的十分之一秒
你只要过10毫秒,1000就等于1秒
System.Threading.Thread.Sleep(1000); // One Second.
请尝试运行以下代码。这对我来说很有效
class PauseExample
{
static void Main(string[] args)
{
int a = 90;
int b = 0;
try
{
int c = a / b;
}
catch
{
Console.WriteLine("In catch");
System.Threading.Thread.Sleep(5000); //waits for 5 seconds
Console.WriteLine("Out of catch");
}
}
}
让我知道这是否有帮助 调用
DoEvents
是有问题的,因为这会导致处理其他事件,甚至可能使方法重新进入。现在还不清楚您想做什么,但坦率地说,我想说:不要调用DoEvents
。这是一种黑客行为,也是造成问题的常见原因。特别是,Timer
实例可能是DoEvents
的大量问题(但还有许多其他问题)。除非我猜错了,否则这是一种限制每秒记录的错误数的尝试,这样你就不会每秒收到1000个相同错误条件的日志条目。而DoEvents()
则试图使应用程序响应。但是不幸的是,你不是这样做的,从长远来看也不是这样(Marc是对的-这只会产生问题,很可能是“没有睡眠”的原因。如果你告诉我们你的整个问题,我们将能够告诉你正确的处理方法。代码还调用newpause
,至少1
;然后循环60次睡眠(maxDelay*1000)
,因此:至少一分钟是正确的,但在运行时,一旦点击catch语句,它就不会暂停,而是continues@ChrisDolan-您如何知道它继续?您是对代码进行逐步评估,还是只检查日志?日志显示,它继续-它发送消息时,应该在em要么出错,要么无错误,它只是在出错后继续发送,没有暂停,没有错误时正常工作。这是最接近正常工作的,因此我们改编了本例中的内容。但是为什么暂停不工作?通过以下方法解决:System.Threading.Thread.Sleep(maxDelay*60*1000)@ChrisDolan-Chris,听着!我们一直在试图告诉你为什么它总是不起作用!因为应用程序.DoEvents()
再次调用原始方法(使用try-catch)!如果你继续这样做,你很快就会遇到堆栈溢出。真的!