win7 C# winForm编程 savefiledialog 不能弹出保存窗体
public void ResMsg()
{
while (isRecMsg)
{
//准备一个数组 准备接收 服务端发来的数据
byte[] msgRec = new byte[1024 * 1024 * 2];
//接收服务端发来的数据,此方法也会阻断当前线程,并返回接收的数据的长度
int recLength = sokClient.Receive(msgRec);
switch(msgRec[0])
{
case 1://接收到 文件
DialogResult reuslt = new SaveFileDialog().ShowDialog(); --- 此处有问题
if (reuslt == System.Windows.Forms.DialogResult.OK)
{
using (FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create))
{
fs.Write(msgRec, 1, recLength - 1);
}
ShowMsg("文件保存完毕!" + saveFileDialog1.FileName);
}
break;
case 2://接收到 字符串消息
{
//将数据转成字符串(要转换的数组,开始转换的下标,要转换的数据长度)
string strRec = System.Text.Encoding.Default.GetString(msgRec, 1, recLength-1);
//将接收到的数据显示在文本框中
ShowMsg(strRec);
break;
}
case 3://接收到 闪屏命令
{
ShakeWindow();
break;
}
}
}
}
客户端和服务器传输文件时, 服务器端都显示发送成功了,但是到客户端保存时,savefiledialog 保存对话框就是弹不来???
仔细的检查代码好几遍,逻辑上没有错误。就是弹不出来,很无语了。就上网查了,查了很多资料,没有什么头绪。在查的过程中,我看见这样的一句话“你前面都说了,你使用线程调用,那么这个线程是否为主线程?如果不是主线程,那么你应该把它交给主线程去处理”,然后我就用一个例子模拟了一下,确实有关系。
模拟的例子:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(saveDialog);
t.IsBackground = true;
//t.ApartmentState = ApartmentState.STA;//缺少这句话,就会出错误。
//不过以上这句在Vs 2010中显示是被微软否决的,过时的,虽然还能用。但是为了更好的兼容版本,微软推出以下方法:
t.SetApartmentState(ApartmentState.STA); //即是在线程启动时设置它的单元状态,这里设置它的状态为单线程单元
t.Start();
}
public void saveDialog()
{
SaveFileDialog result = new SaveFileDialog();
result.ShowDialog();
}
}
模拟的例子:缺少这句话【t.ApartmentState = ApartmentState.STA】,就会出错误。但在vs2010中设置方式变为t.SetApartmentState(ApartmentState.STA);//即是在线程启动时设置它的单元状态,这里设置它的状态为单线程单元
同理 savefiledialog 保存对话框就是弹不来???是不是也是这个问题啊?经过尝试后,还真是这的问题。
就这么简简单单的一句话,就花费了我两个多小时,但最后解决了,也很高兴,并且在找的过程中收获了不少。这就是有失必有得吧!加油!!!
本文转载至http://daociyiyou111.blog.163.com/blog/static/164701512201182104248626/
但经由本人做了些微修改。
win7 C# winForm编程 savefiledialog 不能弹出保存窗体的更多相关文章
- .net winForm 实现类似qq 弹出新闻
.net winForm 实现类似qq 弹出新闻 一.背景: echong 之前一直用 公司大牛c语言写的一个弹出托管,前几天写东西的时候发现com调用不是那么好使.而手头上写的这个东西又是.ne ...
- 线程中使用SaveFileDialog不能弹出窗体
在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...
- C# Winform在win10里弹出无焦点的窗口
原文:C# Winform在win10里弹出无焦点的窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangmy1988/article/det ...
- DevExpress第三方控件使用实例之ASPxPopupControl弹出子窗体
弹出页面控件:ASPxPopupControl, <dxpc:ASPxPopupControl ID="popubCtr" runat="server" ...
- MyEclipse弹出提示窗体
MyEclipse弹出提示窗体 1.弹窗例如以下
- WPF 介绍一种在MVVM模式下弹出子窗体的方式
主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...
- asp.net导出excel并弹出保存提示框
asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1 转:78 | 分享 腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报 ...
- WPF的WebBrowser屏蔽弹出脚本错误窗体
WPF自带的WebBrowser在訪问一些有问题的网页时常常跳出非常多提示脚本错误的窗体, 可是WPF没有自带屏蔽这些窗体的方法或属性. 所以网上找来一使用反射的方法来屏蔽弹出脚本错误窗体的方法, 非 ...
- html 移动端关于长按图片弹出保存问题
在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...
随机推荐
- 查看Oracle的SID用户名等信息
源地址:http://zhidao.baidu.com/question/681563406501077052.html 用sysdba身份登录 比如 conn /as sysdba 匿名管理员登陆 ...
- python matplotlib plot 数据中的中文无法正常显示的解决办法
转发自:http://blog.csdn.net/laoyaotask/article/details/22117745?utm_source=tuicool python matplotlib pl ...
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
- nyoj 54-小明的存钱计划
点击打开链接 小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且 ...
- java 抽象类和接口总结
1.抽象类和抽象方法必须使用abstract 关键字来修饰 2.抽象类不能实例化 3.抽象方法是为实现的方法,它与空方法时两个完全不同的概念 4.abstract 不能喝private static ...
- html标签属性
clientWidth = width + paddingclientHeight = height + paddingoffsetWidth = width + padding + borderof ...
- How to Modify Public Network Information including VIP in Oracle Clusterware (文档 ID 276434.1)
APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.3 to 12.1.0.2 [Release 11.2 to 12. ...
- 移植samba到ios平台,最新支持ios8.3
移植samba到ios平台,最新支持ios8.3 下载https://github.com/kolyvan/kxsmb 开源项目 1 cd samba-4.1.14 2 vi Rakefile 修 ...
- jdk线程常见面试题
请编写一个多线程程序,实现两个线程,其中一个线程完成对某个对象int成员变量的增加操作,即每次加1,另一个线程完成对该对象成员变量的减操作,即每次减1,同时要保证该变量的值不会小于0,不会大于1,该变 ...
- MongoDB基本操作命令
由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...