C# 如何停止WinForms应用程序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

我有一个C#Winforms程序,可以将订单数据发送到第三方API。该程序在服务器上运行,并有一个计时器,用于每隔10秒检查要发送到API的数据

我的问题是,有时第三方的服务器出现故障。当这种情况发生时,我不希望我的程序试图发送数据,然后创建一封电子邮件给用户,告诉他们他们的销售订单每10秒失败一次

下面是我设置计时器并每10秒调用作业的代码:

        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&。我犯了一个愚蠢的错误,但谢谢你找到它。谢谢大家的帮助。