C# 当网络断开连接时,我收到一个错误

C# 当网络断开连接时,我收到一个错误,c#,winforms,C#,Winforms,我有一个自动运行的C#windows窗体(因为我在开始时设置了计时器)。它将读取一些记录并将其插入表中。当网络断开时,此程序会给我错误信息。我希望它恢复工作后,网络恢复,因为它是自动运行。 以下是节目: private void UtilityForm_Load(object sender, EventArgs e) { timer = new System.Timers.Timer(); timer.Elapsed += new ElapsedEventHandler(tmrP

我有一个自动运行的C#windows窗体(因为我在开始时设置了计时器)。它将读取一些记录并将其插入表中。当网络断开时,此程序会给我错误信息。我希望它恢复工作后,网络恢复,因为它是自动运行。 以下是节目:

private void UtilityForm_Load(object sender, EventArgs e)
{
    timer = new System.Timers.Timer();
    timer.Elapsed += new ElapsedEventHandler(tmrProcess_Tick);
    timer.AutoReset = true;
    timer.SynchronizingObject = this;
    timer.Interval = 1000;
    timer.Enabled = true;
}

private void tmrProcess_Tick(object sender, EventArgs e)
{
    ProcessLeads();
}

private void ProcessLeads()
{
    tmrProcess.Stop();
    lblActive.BackColor = Color.Red;
    Application.DoEvents();

    //I m getting error here
    TransmissionBuilder transmissionBuilder = new TransmissionBuilder();
    TransmissionAgent transmissionAgent = new TransmissionAgent();

    int leadCount = 0;

    if (transmissionBuilder.Count > 0)
    {
        toolStripProgress.Maximum = transmissionBuilder.Count;
        toolStripProgress.Minimum = 0;
        toolStripProgress.Value = 0;
    }

    try
    {
        foreach (XDocument document in transmissionBuilder)
        {
            transmissionAgent.SendPingTransmission    (transmissionBuilder.CurrentPingDocument);

            if (transmissionAgent.PingWasAccepted)
            {
                transmissionAgent.SendLeadTransmission(
                    transmissionBuilder.CreateLeadDocument(
                        transmissionAgent.ReservationCode
                    )
                );
            }

            TransmissionLog transmissionLog = new TransmissionLog();

            transmissionLog.WriteLogEntry(
                transmissionBuilder.CurrentApplicantId,
                transmissionBuilder.CurrentPingDocument.ToString(),
                transmissionAgent.PingResponse.ToString(),
                transmissionBuilder.CurrentLeadDocument.ToString(),
                transmissionAgent.LeadResponse.ToString(),
                transmissionAgent.ReservationCode,
                transmissionAgent.ConfirmationCode,
                transmissionAgent.PingReason,
                transmissionAgent.LeadReason,
                transmissionAgent.PingWasAccepted,
                transmissionAgent.LeadWasAccepted);

            toolStripProgress.Value += 1;
            lblMessage.Text = ++leadCount + " out of " + transmissionBuilder.Count.ToString() + " have been processed...";
            Application.DoEvents();

            if (!processIsRunning)
            {
                lblMessage.Text += " after " + leadCount.ToString() + " leads.";
                toolStripProgress.Value = 0;
                break;
            }
        }

        transmissionBuilder.Dispose();
        toolStripStart.Enabled = true;
        toolStripProgress.Value = 0;

        if (leadCount == 1)
            lblMessage.Text = "1 lead was processed.";

        else if (leadCount > 1)
            lblMessage.Text = leadCount.ToString() + " leads were processed.";

            else
            lblMessage.Text = "Process is waiting for leads to send...";
    }
    catch (Exception e)
    {
        Utilities.LogError((long)transmissionBuilder.CurrentApplicantId, e.Message + e.StackTrace);
        Utilities.WriteToFile(e.Message + "-----" + e.StackTrace);
        lblMessage.Text = "Error while connecting with ACE Server.  Retrying...";
    }
    finally
    {
        lblActive.BackColor = Color.Green;
        tmrProcess.Start();
        Application.DoEvents();
    }
}
它在以下几行给了我错误:

TransmissionBuilder transmissionBuilder = new TransmissionBuilder();
TransmissionAgent transmissionAgent = new TransmissionAgent();
错误是:

从服务器接收结果时发生传输级别错误。(提供程序:TCP提供程序,错误:0-信号量超时时间已过期)


我试着把try-catch放进去,但当网络断开连接时,我会以循环的形式收到错误消息,大约1000次,直到网络连接,程序恢复工作。如何防止它向我发送此错误消息?

为什么不在循环前使用
标志
,并在出现错误时设置为true,如:

Boolean hasShownMessage = false;

foreach (XDocument document in transmissionBuilder)
{
  // On catch change it
  catch (Exception e)
        {
            if (!hasShownMessage)
             {
               Utilities.LogError((long)transmissionBuilder.CurrentApplicantId, e.Message + e.StackTrace);
            Utilities.WriteToFile(e.Message + "-----" + e.StackTrace);
            lblMessage.Text = "Error while connecting with ACE Server.  Retrying...";
            }
           hasShownMessage = True; // Set the flag to True
        }
}

请显示您的代码,包括您所说尝试的try-catch块。