异步线程,loading窗体解决思路
异步线程,loading窗体代码入下C# codepublic class WaitForm:IDisposable{private WaitingForm wf//一个
异步线程,loading窗体
代码入下
C# codepublic 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# codeusing(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
}