A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. else if (arrMsgReceive[0] == 1)
  2.                 {
  3.                     SaveFileDialog sfd = new SaveFileDialog();
  4.                     MessageBox.Show("123");
  5.                     if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
  6.                         //MessageBox.Show(" ");
  7.                         string saveFilePath = sfd.FileName;
  8.                         using(FileStream fs = new FileStream(saveFilePath, FileMode.Create)){
  9.                             byte[] arrFile = new byte[length - 1];
  10.                             Buffer.BlockCopy(arrMsgReceive, 1, arrFile, 0, length - 1);
  11.                             fs.Write(arrFile, 0, arrFile.Length);
  12.                         }
  13.                     }
  14.                 }
复制代码
MessageBox弹出来了,然后,就没有然后了,何解?{:soso_e132:}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

正序浏览
李后量 发表于 2012-9-25 12:44
曾经一个大牛说的

首先你使用一个线程去不停的接收消息,你创建线程时,在不设定ApartmentState时,默认是 ...

太棒了!解决了!{:3_67:}

版主快来加分,加分加分加分
回复 使用道具 举报
本帖最后由 李后量 于 2012-9-25 12:45 编辑

曾经一个大牛说的

首先你使用一个线程去不停的接收消息,你创建线程时,在不设定ApartmentState时,默认是MTA多线程单元,而这里你想打开一个保存文件对话框,这一控件支持的是STA单线程单元,所以你需要将你的线程在使用前ApartmentState设定为STA模式(很多的控件都是支持STA模式)

  Thread th=new Thread(...);
   th.SetApartmentState(ApartmentState.STA);
   th.Start();

你通过将winform 程序反编译,可以看到程序入口点main()上面有一个标记[STAThread],也就是说,主线程是STA模式,而它使用的控件肯定是能支持STA模式的,但是不是只支持STA就不清楚了,常用的MessageBox,会弹出一个消息框,这个好像就什么线程都可以用的。
回复 使用道具 举报
我也碰到了这个问题,设置断点调试发现是可以跑到
“ if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {”
这里的,就是不弹出“保存”的对话框,晚上回去再看看怎么回事,顶一个。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你断点调试,弹出了messagebox,就应该是运行了那就实例化得语句了,你试着在运行后alt+tab切换一下,说不定就有窗口能弹出来

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
换个浏览器试试看吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马