我的一个winform窗体上有一进度条,目的是在执行一个方法的时候弹出来显示进度,但是如果用showdialog的话就无法继续执行方法,能不能异步调用showdialog?希望能给出示例代码,非常感谢!
解决方案 »
- 新人问个问题,获取ListView控件子项的值
- ListView 项宽度,怎么调
- 根据smtp返回的信息或邮件来确认发出的邮件状态
- ArrayList 是不是什么都能装
- 请问:钩子函数和回调函数,一样吗?
- DataGridView如何实现增删改查?谢谢~~~~~~~~~
- 我做了一个web的邮箱管理系统,怎么登陆人家邮件服务器之后注销啊?
- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\技术求证,感谢\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
- 用“|”间隔是什么意思?
- 关于动态修改类属性的问题
- 如何用C#写自己删除自己的程序。
- [求助]httperr1.log 每天都出一些ERROR,请大家帮忙分析一下
你用一个新的线程就可以了
Thread th = new Thread(new ThreadStart(startSlash));
void startSlash()
{
Form2 f = new Form2();
f.ShowDialog();
}
比如
void OpControl()
{ ---}那语句为
if(control1.InvokeRequired)
{
MethodInvoker mi = new MethodInvoker(OpControl);
control1.Invoke(mi);
}
else
{
OpControl();
}
private void checkerror()
{
//先初始化
dialogform df = new dialogform();
df.progressbar1.Maximum = max;
df.showdialog();
//执行检查
}
如此操作的话怎么做异步调用?
必须有事件通知
比如
public delegate void CheckOne(Error e);
public event CheckOne OnCheckOne;
void onCheckOne(Error e)
{
if(OnCheckOne!=null)
{
OnCheckOne(e);
}
}在 dialogform 里面需要主界面更改process的方法里
onCheckOne(..);
-------------------------------
private void checkerror()
{
//先初始化
dialogform df = new dialogform();
df.progressbar1.Maximum = max;
df.showdialog();
//执行检查
}
-----------------
改成
private void checkerror()
{ Thread th = new Thread(new ThreadStart(tes));
th.Start();
}
void tes
{
//先初始化
dialogform df = new dialogform();
df.progressbar1.Maximum = max;
df.OnCheckOne+=...
df.showdialog();
//执行检查}
然后在主界面中OnCheckOne中用Invoke
--------------------------------
如果你的ProcessBar在dialogform 中也一样,只不过事件写在MainForm中,然后通知dialogform
估计楼主现在遇到的问题是,一旦showdialog后下面的代码就不运行了,所以楼主想用另开起一个线程来showdialog
我也遇到到这样的问题了 现在可以开启新线程,但showlialog后的窗体就不是模式对话框了,就是后面的窗体还可以操作,现在问题我也没解决希望懂的人指点下 谢谢
http://topic.csdn.net/u/20101222/18/c24eee6d-e68f-45cd-907e-068e056ef5dc.html?seed=198845206&r=70769839#r_70769839