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

首頁 > 編程 > C# > 正文

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

2020-01-24 02:12:53
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 集安市| 安龙县| 汉中市| 昌都县| 法库县| 荔浦县| 平凉市| 陆川县| 河源市| 阜新市| 天全县| 东宁县| 阜康市| 卢湾区| 肃北| 文登市| 石泉县| 玉门市| 岑溪市| 乌兰浩特市| 石柱| 治多县| 巫山县| 睢宁县| 买车| 高唐县| 拉孜县| 房产| 黔东| 古浪县| 彰化市| 同德县| 平安县| 通渭县| 太湖县| 威信县| 胶南市| 东港市| 夏津县| 夏津县| 乐清市|