黑马程序员技术交流社区
标题:
帮我看看为什么这个SaveFileDialog没有弹出来?
[打印本页]
作者:
李阳Leo
时间:
2012-9-23 19:05
标题:
帮我看看为什么这个SaveFileDialog没有弹出来?
else if (arrMsgReceive[0] == 1)
{
SaveFileDialog sfd = new SaveFileDialog();
MessageBox.Show("123");
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
//MessageBox.Show(" ");
string saveFilePath = sfd.FileName;
using(FileStream fs = new FileStream(saveFilePath, FileMode.Create)){
byte[] arrFile = new byte[length - 1];
Buffer.BlockCopy(arrMsgReceive, 1, arrFile, 0, length - 1);
fs.Write(arrFile, 0, arrFile.Length);
}
}
}
复制代码
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