黑马程序员技术交流社区

标题: 帮我看看为什么这个SaveFileDialog没有弹出来? [打印本页]

作者: 李阳Leo    时间: 2012-9-23 19:05
标题: 帮我看看为什么这个SaveFileDialog没有弹出来?
  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:}
作者: 许庭洲    时间: 2012-9-24 14:48
换个浏览器试试看吧!
作者: 梁健1    时间: 2012-9-24 15:06
你断点调试,弹出了messagebox,就应该是运行了那就实例化得语句了,你试着在运行后alt+tab切换一下,说不定就有窗口能弹出来
作者: 林洲    时间: 2012-9-24 16:25
我也碰到了这个问题,设置断点调试发现是可以跑到
“ if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {”
这里的,就是不弹出“保存”的对话框,晚上回去再看看怎么回事,顶一个。
作者: 李后量    时间: 2012-9-25 12:44
本帖最后由 李后量 于 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,会弹出一个消息框,这个好像就什么线程都可以用的。
作者: 李阳Leo    时间: 2012-9-25 13:03
李后量 发表于 2012-9-25 12:44
曾经一个大牛说的

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

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

版主快来加分,加分加分加分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2