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/

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/VicHuang/p/3188116.html
Copyright © 2011-2022 走看看