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

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信息
...全文
35 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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#学生管理系统 主要代码: (1)自定义函数类代码: public class LinkDataBase { private string strSQL; //与SQL Server 的连接字符串设置 //与数据库的连接 private string connectionString = "server = .;database=stu_Manage;uid=sa;pwd=123"; private static SqlConnection con = new SqlConnection("server = .;database=stu_Manage;uid=sa;pwd=123"); private SqlConnection myConnection; private DataSet ds = new DataSet(); private SqlDataAdapter da; public DataSet SelectDataBase(string tempStrSQL, string tempTableName) //根据输入的SQL语句检索数据库数据 { this.strSQL = tempStrSQL; this.myConnection = new SqlConnection(connectionString); this.da = new SqlDataAdapter(this.strSQL, this.myConnection); this.ds.Clear(); this.da.Fill(ds, tempTableName); //返回填充了数据的DataSet,其中数据表以tempTableName出的字符串命名 return ds; } public DataTable SelectDataBase(string tempStrSQL) //检索数据库数据(传字符串直接操作数据库) { this.myConnection = new SqlConnection(connectionString); DataSet tempDataSet = new DataSet(); this.da = new SqlDataAdapter (tempStrSQL, this.myConnection); this.da.Fill(tempDataSet); return tempDataSet.Tables[0]; } public void deleteInfo(string strcmd)//删除信息 { SqlCommand cmd = new SqlCommand(strcmd, con); try { con.Open(); if (MessageBox.Show("确定要删除吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { cmd.ExecuteNonQuery(); MessageBox.Show("删除成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); return; } finally { con.Close(); } } public void addInfo(string strcmd)//定义添加信息事件 { try { con.Open(); SqlCommand cmd = new SqlCommand(strcmd, con); cmd.ExecuteNonQuery(); MessageBox.Show("添加成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } finally { con.Close(); } } public void updateInfo(string strcmd)//自定义更新信息方法 { try { con.Open(); SqlCommand cmd = new SqlCommand(strcmd, con); cmd.ExecuteNonQuery(); MessageBox.Show("修改成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { con.Close(); } } } . . . . . . . . . (2) > . . .
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2004-05-05 06:09
社区公告

让您成为最强悍的C#开发者