我是使用 Windows 窗体应用程序开发的新手,我有一个问题可以通过一些关于我应该采用的最佳实践方法的帮助/指导来解决。
背景:
我有一个基于表单的应用程序,它需要使用 WCF 服务中的数据每分钟刷新一次,然后使用列表视图控件中的最新结果更新 UI。我有这一切在原则上工作,但应用程序间歇性崩溃,我需要解决这个问题。我已经删除了下面代码的主要部分。可能不需要实际的螺母和螺栓。
代码:
public partial class Form1 : Form
{
readonly MatchServiceReference.MatchServiceClient _client = new MatchServiceReference.MatchServiceClient();
public Form1()
{
_client.GetMMDataCompleted += new EventHandler<GetMMDataCompletedEventArgs>(_client_GetMMDataCompleted);
}
//Arm Timer
private void ArmTimer(object sender, EventArgs e)
{
aTimer = new Timer();
aTimer.Elapsed += OnTimedEvent;
aTimer.Interval = 60000;
aTimer.Enabled = true;
}
//Timer elapsed event
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
try
{
LoadMatches();
if (LastUpdated.InvokeRequired)
{
LastUpdated.Invoke(new MethodInvoker(delegate { LastUpdated.Text = e.SignalTime.ToString(); }));
}
}
catch (Exception exception)
{
}
}
//Load matches
private void LoadMatches()
{
try
{
aTimer.Enabled = false;
_client.GetMMDataAsync();
}
catch (Exception e)
{
//EventLog.WriteEntry("Application", e.InnerException.ToString(), EventLogEntryType.Error);
aTimer.Enabled = true;
}
}
void _client_GetMMDataCompleted(object sender, GetMMDataCompletedEventArgs e)
{
if (e.Result != null)
{
var matches = e.Result;
Debug.WriteLine("Matches received from service");
if (!IsHandleCreated && !IsDisposed) return;
// Invoke an anonymous method on the thread of the form.
Invoke((MethodInvoker) delegate
{
try
{
LoadTheMonitorMatches(matches);
}
catch (Exception exception)
{
Debug.WriteLine("INNER EXCEPTION" + exception.InnerException);
Debug.WriteLine("EXCEPTION MESSAGE" + exception.Message);
}
});
}
aTimer.Enabled = true;
}
}
}
例外:
我得到的例外如下 -
异常信息:System.Reflection.TargetInvocationException 堆栈:在 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在 MM.Form1._client_GetMMDataCompleted(System.Object, MM.MatchServiceReference.GetMMDataCompletedEventArgs) 在 MM.MatchServiceReference.GetMMDataCompletedEventArgs.get_Result() 在 MM。 MatchServiceReference.MatchServiceClient.OnGetMMDataCompleted(System.Object) 在 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object) 在 System.Threading.ExecutionContext.runTryCode(System.Object) 在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode , System.Object) 在 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在 System.Threading.ThreadPoolWorkQueue.Dispatch()在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
对此的任何帮助/建议将不胜感激。
干杯