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