国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法

2019-10-29 21:48:14
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法,涉及針對線程的調用問題,是比較實用的技巧,需要的朋友可以參考下
 
 

本文實例分析了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#程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泾川县| 绥德县| 孟州市| 涪陵区| 樟树市| 崇文区| 称多县| 玉溪市| 荥经县| 永康市| 沙坪坝区| 平定县| 龙泉市| 武义县| 江西省| 新建县| 南木林县| 昌吉市| 清新县| 安溪县| 温宿县| 长乐市| 静宁县| 南京市| 安陆市| 通海县| 永顺县| 吴川市| 阿瓦提县| 永城市| 淅川县| 山东省| 繁峙县| 鄯善县| 明水县| 合山市| 仁布县| 昌平区| 酉阳| 西青区| 黔江区|