win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法

作者:shichen2014 时间:2022-09-18 07:27:57 

本文实例分析了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 保存对话框就是弹不来???是不是也是这个问题啊?经过尝试后,还真是这的问题。

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

希望本文所述对大家的C#程序设计有所帮助。

标签:win7,C#,winForm,解决方法
0
投稿

猜你喜欢

  • Java实现走迷宫回溯算法

    2022-06-02 05:11:29
  • Java反射机制的简单讲解

    2023-12-12 20:49:13
  • Java利用钉钉机器人实现发送群消息

    2021-06-28 23:37:33
  • Spring Boot缓存实战 EhCache示例

    2023-08-30 12:23:35
  • 浅谈java中的重载和重写的区别

    2023-03-31 04:45:57
  • Spring2.5.6开发环境搭建图文教程

    2023-07-28 18:01:02
  • flutter中的资源和图片加载示例详解

    2023-08-24 13:19:39
  • 使用flutter创建可移动的stack小部件功能

    2023-06-21 12:28:25
  • java微信公众号支付开发之现金红包

    2023-09-01 17:28:38
  • 说说@ModelAttribute在父类和子类中的执行顺序

    2022-07-31 17:59:55
  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法

    2021-10-18 08:01:29
  • Android WebView基础应用详解

    2023-09-30 07:36:46
  • 基于java构造方法Vector修改元素源码分析

    2023-11-25 10:54:56
  • 全面详解Maven打包及其相关插件和高级特性

    2022-03-03 21:10:00
  • Spring中自定义数据类型转换的方法详解

    2022-10-09 02:56:51
  • 基于javaWeb 项目SSM配置要点及可能遇到的问题和解决方法

    2023-10-27 21:45:16
  • SpringBoot整合dataworks的实现过程

    2023-11-29 12:13:09
  • SpringBoot参数校验Validator框架详解

    2023-09-22 07:08:40
  • Java利用HttpClient模拟POST表单操作应用及注意事项

    2023-11-29 23:48:01
  • 解析Java中的static关键字

    2022-03-02 17:15:35
  • asp之家 软件编程 m.aspxhome.com