异步线程,loading窗体
代码入下
C# code
public class WaitForm:IDisposable
{
private WaitingForm wf;//一个窗体
private Thread myThread;
public WaitForm()
{
myThread = new Thread((ThreadStart)delegate{ wf = new WaitingForm();Application.Run(wf); });
}
void IDisposalle.Dispose()
{
if(wf!=null)
wf.Invoke((EventHandler)delegate{wf.Close();});
}
}
//另一个类的调用
C# code
using(WaitForm ww = new WaitForm())
{
for(int i=0;i<999999;i++)
{}
}
问题是当我把999999变为100的时候问题就来了 里面太快了 Dispose 的时候 wf为空
不知道 怎么办好了 有时候 就会关不掉等待窗体 试过在Dispose方法中加入 Thread.Sleep(20)
用小例子调试还行 放到我的大型应用程序中就失效了。
DevExpress.Utils.WaitDialogForm
的效果不错 不知道它怎么搞的 好像是画出来的
分不多 求达人帮忙
------解决方案--------------------调用了Dispose就不应该再使用这个对象(实例)了,当然也包括实例成员wf
设计上有问题,在WaitForm中定义委托
------解决方案--------------------
public class WaitForm : IDisposable
{
private WaitingForm wf;//一个窗体
private Thread myThread;
private object lockWf = new object();
public WaitForm()
{
myThread = new Thread((ThreadStart)delegate
{
lock (lockWf)
{
wf = new WaitingForm();
}
wf.ShowDialog();
});
myThread.Start();
}
#region IDisposable 成员
void IDisposable.Dispose()
{
lock (lockWf)
{
if (wf != null)
{
while (!wf.InvokeRequired)
{
Thread.Sleep(10);
}
wf.Invoke((EventHandler)delegate { wf.Close(); });
}
else
{
myThread.Abort();
}
}
}
#endregion
}