语句执行顺序问题,解决立即给分

vivianfdlpw 2004-05-05 06:09:40
一个简单的语句:
try
{
ClassB.MethodB(); //在类ClassA中执行类ClassB的方法MethodB
MessageBox.Show("Success"); //提示成功信息
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

怎么确保方法MethodB执行完毕后才执行MessageBox.Show("Success")?
因为我测试的时候发现先弹出Success信息,然后才执行方法MethodB,然后又
弹出Success信息
...全文
12 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vivianfdlpw 2004-05-05
To greatsft(C的使者):

谢谢,问题解决了:)

To zengch24(zFin):

同样谢谢你的解释:))
回复
zengch24 2004-05-05
.Net中,窗体控件是事件驱动,换句话说就是当创建完窗体后就Show()语句就结束了。当然会进行到下一条语句中去,并不会等到执行了Opt的Click才下去。
在Opt的Click中调用:
drw.A =draw.CommonA ;
drw.N =draw.CommonN ;

MessageBox.Show (drw.A .ToString ()+"\n"+drw.N .ToString ());
drw.DrawPicture (pictureBox1);
回复
greatsft 2004-05-05
把与drw.DrawPicture (pictureBox1);相关的内容放到一个单独
的方法中,比如说是void DrawPicture(){
...
drw.DrawPicture (pictureBox1);
...
}
在类中定义一个private Thread thread=null;
在你的menuItem3_Click事件中加入thread=new Thread(new ThreadStart(DrawPicture));
thread.Start();
thread.Suspend(); //挂起线程
在你的button事件中加入
thread.Resume();//当执行完所要的任务后,唤醒线程



wish u good luck
Greatsft
回复
vivianfdlpw 2004-05-05
这个问题其实就是两个窗体间传递变量问题,我的想法是通过静态变量来传递
回复
vivianfdlpw 2004-05-05
代码编译是通过的,没有问题
回复
vivianfdlpw 2004-05-05
其实真正的代码是这样的:
(drw是类draw的一个实例,已经定义。类draw有两个static变量CommonA和CommonB)

private void menuItem3_Click(object sender, System.EventArgs e)//File_New
{

Option opt=new Option ();
try
{
opt.Show ();
drw.A =draw.CommonA ;
drw.N =draw.CommonN ;

MessageBox.Show (drw.A .ToString ()+"\n"+drw.N .ToString ());
drw.DrawPicture (pictureBox1);
}
catch
{
}
}

Form1中的菜单被单击后,引发click事件,开始执行上边的代码:
首先构造一个option窗体,这个窗体中又有button,通过opt中的utton事件来修改draw类
中的static变量CommonA和CommonB,然后opt窗体隐藏。Form1窗体中执行drw.DrawPicture (pictureBox1)方法。

但是,测试的时候发现先drw.DrawPicture (pictureBox1),这个时候static变量都是初始值0
然后才执行opt窗体的button事件来修改这两个static变量
回复
q7a 2004-05-05
ClassB b=new ClassB;
try
{
b.MethodB(); //在类ClassA中执行类ClassB的方法MethodB
MessageBox.Show("Success"); //提示成功信息
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
在我的机子上先执行b.MethodB();后MessageBox.Show("Success"); 很正常
回复
lxcc 2004-05-05
try
{
//ClassB.MethodB(); //在类ClassA中执行类ClassB的方法MethodB
//ClassB为什么不实例化
//准确应该是:
//ClassB classb = new ClassB(假如有构造函数参数,需要加进来);
classb.MethodB();
MessageBox.Show("Success"); //提示成功信息
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}


//我觉得你的执行顺序没有问题,有可能这一段代码都没有正确编译!
回复
zengch24 2004-05-05
不会哟,又不是多线程或异步?
回复
BearRui 2004-05-05
可不可以通过判断MethodB的返回值来实现啊。

比如:

bool b=ClassB.MethodB();

if (b==true)
{
MessageBox.Show("Success");
}

猜测:

回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.