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 不能弹出保存窗体的更多相关文章

  1. .net winForm 实现类似qq 弹出新闻

    .net winForm 实现类似qq 弹出新闻   一.背景: echong 之前一直用 公司大牛c语言写的一个弹出托管,前几天写东西的时候发现com调用不是那么好使.而手头上写的这个东西又是.ne ...

  2. 线程中使用SaveFileDialog不能弹出窗体

    在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...

  3. C# Winform在win10里弹出无焦点的窗口

    原文:C# Winform在win10里弹出无焦点的窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangmy1988/article/det ...

  4. DevExpress第三方控件使用实例之ASPxPopupControl弹出子窗体

    弹出页面控件:ASPxPopupControl, <dxpc:ASPxPopupControl ID="popubCtr" runat="server" ...

  5. MyEclipse弹出提示窗体

    MyEclipse弹出提示窗体 1.弹窗例如以下

  6. WPF 介绍一种在MVVM模式下弹出子窗体的方式

    主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...

  7. asp.net导出excel并弹出保存提示框

    asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1  转:78   |  分享  腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报          ...

  8. WPF的WebBrowser屏蔽弹出脚本错误窗体

    WPF自带的WebBrowser在訪问一些有问题的网页时常常跳出非常多提示脚本错误的窗体, 可是WPF没有自带屏蔽这些窗体的方法或属性. 所以网上找来一使用反射的方法来屏蔽弹出脚本错误窗体的方法, 非 ...

  9. html 移动端关于长按图片弹出保存问题

    在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...

随机推荐

  1. EDE,DEDE网站搬家,DEDECMS搬家教程,一看就会

    无聊做个小教程:DEDE搬家,本人提供搬家 先来说下DEDE 大家会安装吧,不多说,看图 一.进入织梦DedeCms的后台备份数据库 步骤:系统 –> 数据库备份/还原 -> 全选有所织梦 ...

  2. 93、App Links (应用程序链接)实例

    •网页端statements.json文件配置说明     package_name :APP包的名. sha256.... :  APP的签名.   •应用Manifest文件声明说明 <ap ...

  3. nyoj 79 导弹拦截

    点击打开链接 拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发 ...

  4. win10 TortoiseSVN 部分图标不显示

    原因:https://msdn.microsoft.com/en-us/library/cc144123(VS.85).aspx Note   The number of different icon ...

  5. Arch-Linux-添加中文字体

    代码下载: Arch-Linux-添加中文字体.txt

  6. C# 位域[flags] 转

    C# 位域[flags] .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: ...

  7. 尼姆博弈HDU1907

    HDU1907 http://acm.hdu.edu.cn/showproblem.php?pid=1907 两种情况1.当全是1时,要看堆数的奇偶性 2.判断是奇异局势还是非奇异局势 代码: #in ...

  8. 009 The Interfaces In JAVA(官网文档翻译)

    Interfaces There are a number of situations in software engineering when it is important for dispara ...

  9. Flex 4 不同主题下容器子元素的管理方法

    Flex 下,容器主要分两类:Spark容器, Halo容器. Spark容器 Halo容器 说明 numElements numChildern 容器的子元素数量. addElement( ) ad ...

  10. JS实现联想输入(一)

    这里是我们的项目中的一个使用JS实现联想输入的功能代码,在此做个小的记录并且将它分享给大家希望对园中的朋友有用! 我将分享三段都非常简单的代码,仅仅作为个人的一点小小的积累而已! 1:后台的Actio ...