我正在使用C#修改旧版Visual Studio .NET 2003解决方案和.NET 1.1。
我刚刚创建了一个新表单。这个表格有四个图片框。其中三个包含png图像,最后一个包含动画图像。还有一个标签。最后,根据某些条件(int结果)显示了一个按钮。
表单类如下所示:
private System.Threading.Timer _timer;
public delegate int GetPriceDelegate(Person person, out string resultMsg);
int GetPrice(Person person, out string resultMsg);
private void FrmPrices_Load(object sender, System.EventArgs e)
{
AsyncCallback callback = new AsyncCallback(PriceCallback);
GetPriceDelegate handler = new GetPriceDelegate(Commons.GetPrice);
handler.BeginInvoke(person, out resultMsg, callback, null);
}
private void PriceCallback(IAsyncResult result)
{
GetPriceDelegate handler = (GetPriceDelegate) ((AsyncResult) result).AsyncDelegate;
try
{
string resultMsg;
int rs = handler.EndInvoke(out resultMsg, result);
if (rs == 0)
{
this.pictureBox.SendToBack();
this.pictureBox.Visible = false;
this.btnOk.BringToFront();
this.btnOk.Visible = true;
System.Threading.TimerCallback callback = new System.Threading.TimerCallback(Timer_Callback);
_timer = new System.Threading.Timer(callback, null, 10000, System.Threading.Timeout.Infinite);
}
else if (rs == -1)
{
}
else
{
}
}
catch (Exception ex)
{
// do something
}
}
private void Timer_Callback(object state)
{
this.Close();
}
private void btnOk_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void FrmPrices_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (_timer != null)
{
_timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
_timer.Dispose();
}
}
在另一个类Commons中,有GetPrice方法。此方法基本上调用Web服务并返回结果。
回调" PriceCallback"执行异步调用(方法的异步调用完成),我调用EndInvoke(...)并检查异步调用返回的结果。
如果结果为0(rs == 0),那么我发送回来并使图片框不可见并将其置于前面并使按钮可见。注意:在表单中,按钮位于图片框上方,但同时只显示其中一个(图片框或按钮)。最后,我创建一个计时器并启动它。
所以此时,表单显示标签(包含消息)和按钮(关闭表单)。此消息在10秒内显示。如果用户没有单击按钮关闭表单,则表单会在为计时器定义的10秒后自动关闭。
我的问题如下:
我拥有的唯一资源是4个图片框的四个图像,其中一个是动画图像。我不明白为什么有时会因为这个错误而崩溃,有时候不会崩溃。
关于这些问题的任何想法?