zoukankan      html  css  js  c++  java
  • win7 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;//缺少这句话,就会出错误。
                t.Start();
            }

            public void saveDialog()
            {
                SaveFileDialog result = new SaveFileDialog();
                result.ShowDialog();
            }
        }

      模拟的例子:缺少这句话【t.ApartmentState = ApartmentState.STA】,就会出错误。

    同理  savefiledialog 保存对话框就是弹不来???是不是也是这个问题啊?经过尝试后,还真是这的问题。

    就这么简简单单的一句话,就花费了我两个多小时,但最后解决了,也很高兴,并且在找的过程中收获了不少。这就是有失必有得吧!加油!!!

    转载:http://daociyiyou111.blog.163.com/blog/static/164701512201182104248626/

  • 相关阅读:
    Laya中使用Protobuf
    Laya中第三方库的使用
    Laya的骨骼换装
    Laya的粒子效果
    Laya的预设Prefab (预制件)
    Egret EUI Tab + ViewStack
    Egret 划线手势动画 (切水果)
    Egret3.2.6老项目转成5.2.22微信小游戏,遇到exml加载不了问题
    AndroidUI设计 之 图片浏览器
    Android应用的自动更新模块
  • 原文地址:https://www.cnblogs.com/VicHuang/p/3188116.html
Copyright © 2011-2022 走看看