在frmUserGroupList界面中 private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
{
Thread td = new Thread(delegate() { FormWait fw = new FormWait(); fw.ShowDialog(); });
td.Start();
BindUserList();//加载数据
td.Abort();
}我想要实现在执行SelectedIndexChanged事件的时候 弹出FormWait界面
并且一直在最前面就是 ShowDialog(); 这样子的
但是我鼠标点到frmUserGroupList界面时FormWait跑下面去了。
怎么样才能让 FormWait 一直在最前面
感谢
{
Thread td = new Thread(delegate() { FormWait fw = new FormWait(); fw.ShowDialog(); });
td.Start();
BindUserList();//加载数据
td.Abort();
}我想要实现在执行SelectedIndexChanged事件的时候 弹出FormWait界面
并且一直在最前面就是 ShowDialog(); 这样子的
但是我鼠标点到frmUserGroupList界面时FormWait跑下面去了。
怎么样才能让 FormWait 一直在最前面
感谢
解决方案 »
- 如何将C#中的string(Unicode) 转换为 AnsiString(ascii)
- HTMLTableCellElement引用命名空间错误
- ASP.NET里面如何判定页面是否加载完成?????????????
- (高手请进,我都等了好几天了,急啊,有没有人帮助我啊)winform:datagrid中怎样设置各列复杂的计算关系?
- ToString()方法如何用
- 如何遍历sql2000数据库,返回库中每个表的表名?
- 怎样实现:WinForm不出现滚动条
- 请问:C#中 虚基类 等于 抽象类吗?
- 如何设计定时器
- 告别朋友们一段日子,我要去闭门思过了!
- 关于水晶报表
- 关于c# 移动开发中的MouseMove事件
你用 fw.Show(this);试试
fw.TopMost = true;
new Thread(delegate()
{
Application.Run(fw);
}).Start();
BindUserList();//加载数据
fw.Close();
BindUserList方法放到子线程执行,子线程结束后关闭fw
和
fw.Show(this);
都看不到FormWait界面
继续等待。
提示
无法访问已释放的对象。
对象名:“FormWait”。
都哪跟哪啊。都是局部变量,哪来的第一次第二次。每次都new出来的。点100次也是一样的。你要是挪到外面,成员变量了,那能不出问题?
private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
{
FormWait fw = new FormWait();
fw.TopMost = true;
new Thread(delegate()
{
Application.Run(fw);
}).Start();
BindUserList();//加载数据
fw.Close();
}
在加载数据多的时候 看着好像程序死了
多线程可以给客户比较好的体验
不过也谢谢 CoolieMan 的意见
private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
{
FormWait fw = new FormWait();
fw.TopMost = true;
new Thread(delegate()
{
if (fw == null)
fw = new FormWait();
Application.Run(fw);
}).Start();
for (int i = 0; i < 200; i++)
{
BindUserList();//加载数据
}
fw.Close();
}
我是放在里面的
private void lvUserGroup_SelectedIndexChanged(object sender, EventArgs e)
{
Form fw = new Form();
fw.TopMost = true;
new Thread(delegate()
{
Application.Run(fw);
}).Start();
for (int i = 0; i < 200; i++)
{
BindUserList();//加载数据
}
fw.Close();
}我放Form 怎么还是提示
无法访问已释放的对象。
对象名:“Form”。 呢?
如果你的BindUserList方法一定要在主线程执行,而且fw要显示,那就都放主线程。可以试下改成下面的。
FormWait fw = new FormWait();
fw.Shown += new EventHandler(fw_Shown);
fw.ShowDialog();
void fw_Shown(object sender, EventArgs e)
{
Application.DoEvents();
BindUserList();//加载数据
Form form = sender as Form;
form.Close();
}
执行BindUserList这个耗时方法时,主线程繁忙,fw只要显示就可以,不一定要ShowDialog
{
FormWait fw = new FormWait();
fw.TopMost = true;
new Thread(delegate()
{
Application.Run(fw);
}).Start();
BindUserList();//加载数据
fw.Invoke((EventHandler)delegate{fw.Close();});
}
private void button2_Click(object sender, EventArgs e)
{
Form wait = new Form();
wait.TopMost = true;
new Thread((ThreadStart)delegate
{
Application.Run(wait);
}).Start();
int tick = Environment.TickCount;
while (Environment.TickCount - tick < 5000)
{
this.Text = ((Environment.TickCount - tick) / 1000).ToString();
}
wait.Invoke((EventHandler)delegate{wait.Close();});
} 应该不会错了,vs2008测试通过。
谢谢
zzx509 和 wuyazhe
帮助^_^