C# 如何停止WinForms应用程序10分钟?
我有一个C#Winforms程序,可以将订单数据发送到第三方API。该程序在服务器上运行,并有一个计时器,用于每隔10秒检查要发送到API的数据 我的问题是,有时第三方的服务器出现故障。当这种情况发生时,我不希望我的程序试图发送数据,然后创建一封电子邮件给用户,告诉他们他们的销售订单每10秒失败一次 下面是我设置计时器并每10秒调用作业的代码:C# 如何停止WinForms应用程序10分钟?,c#,winforms,timer,C#,Winforms,Timer,我有一个C#Winforms程序,可以将订单数据发送到第三方API。该程序在服务器上运行,并有一个计时器,用于每隔10秒检查要发送到API的数据 我的问题是,有时第三方的服务器出现故障。当这种情况发生时,我不希望我的程序试图发送数据,然后创建一封电子邮件给用户,告诉他们他们的销售订单每10秒失败一次 下面是我设置计时器并每10秒调用作业的代码: private static void SetTimer() { aTimer = new System.Tim
private static void SetTimer()
{
aTimer = new System.Timers.Timer(10000);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
作业本身并不重要,它运行时没有问题
如果API没有响应,我会得到一个介于500和503之间的错误,所以我写了以下内容:
if (statusCode > 500 || statusCode < 504)
{
aTimer.Enabled = false;
System.Threading.Thread.Sleep(600000);
aTimer.Enabled = true;
return;
}
else
{
// This will post the migration status for anything EXCEPT a server failure
PostMigrationStatus(DocEntry, JobSuccess, jobID);
}
if(状态码>500 | |状态码<504)
{
aTimer.Enabled=false;
系统线程线程睡眠(600000);
aTimer.Enabled=true;
返回;
}
其他的
{
//这将发布除服务器故障之外的任何迁移状态
迁移后状态(DocEntry、JobSuccess、jobID);
}
错误处理不起作用,似乎在遇到500-503错误后,作业再也不会启动
有什么想法吗?为什么不使用你已经拥有的计时器来管理睡眠:
if (statusCode > 500 || statusCode < 504)
{
aTimer.Interval = 600000;
return;
}
if(状态码>500 | |状态码<504)
{
a时间间隔=600000;
返回;
}
然后,在计时器回调代码中,您可以检查正常操作是否已恢复,并将
间隔重置为10000
为什么不使用您已经拥有的计时器来管理睡眠:
if (statusCode > 500 || statusCode < 504)
{
aTimer.Interval = 600000;
return;
}
if(状态码>500 | |状态码<504)
{
a时间间隔=600000;
返回;
}
然后,在计时器回调代码中,您可以检查正常操作是否已恢复,并将间隔重置为10000
如果您试图仅捕获错误501、502和503,则将if
语句中的|
更改为&
。现在,如果
正在捕获所有状态代码,则该。而且,实际上,既然您说您专门寻找500到503,您需要将
更改为=
,如:if(statusCode>=500&&statusCode<504)
将if
语句中的|
更改为&
,如果您只想捕获错误501、502和503。现在,如果
正在捕获所有状态代码,则该。而且,实际上,由于您说您专门寻找500到503,您需要将
更改为=
,如:如果(statusCode>=500&&statusCode<504)
在类中添加这些变量
static bool IsErrorWait = false;
static double DefaultTick = 10000;
static double WaitTick = 600000;
更改静态方法,如下所示
private static void SetTimer()
{
aTimer = new System.Timers.Timer(DefaultTick);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
然后将此代码添加到计时器事件中
if (IsErrorWait == true)
{
aTimer.Interval = DefaultTick;
IsErrorWait = false;
}
if (statusCode >= 500 && statusCode <= 504)
{
IsErrorWait = true;
aTimer.Interval = WaitTick;
return;
}
else
{
// This will post the migration status for anything EXCEPT a server failure
PostMigrationStatus(DocEntry, JobSuccess, jobID);
}
if(IsErrorWait==true)
{
aTimer.Interval=DefaultTick;
IsErrorWait=false;
}
如果(statusCode>=500&&statusCode在类中添加这些变量
static bool IsErrorWait = false;
static double DefaultTick = 10000;
static double WaitTick = 600000;
更改静态方法,如下所示
private static void SetTimer()
{
aTimer = new System.Timers.Timer(DefaultTick);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
然后将此代码添加到计时器事件中
if (IsErrorWait == true)
{
aTimer.Interval = DefaultTick;
IsErrorWait = false;
}
if (statusCode >= 500 && statusCode <= 504)
{
IsErrorWait = true;
aTimer.Interval = WaitTick;
return;
}
else
{
// This will post the migration status for anything EXCEPT a server failure
PostMigrationStatus(DocEntry, JobSuccess, jobID);
}
if(IsErrorWait==true)
{
aTimer.Interval=DefaultTick;
IsErrorWait=false;
}
如果(statusCode>=500&&statusCode很好,我会这样做并报告。很好,我会这样做并报告。这是一个巨大的问题。我会改变并报告。我只是想说,在所有这些答案中有很多好的信息,但最大的问题是| vs&。我犯了一个愚蠢的错误,但谢谢你找到它。Than谢谢大家的帮助。嗯,这是一个大问题。我会改变并向大家汇报。我只是想说,在所有这些答案中有很多好的信息,但最大的问题是| | vs&。我犯了一个愚蠢的错误,但谢谢你找到它。谢谢大家的帮助。