程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> win7中C#的winForm編程應用savefiledialog不克不及彈出保留窗體的處理辦法

win7中C#的winForm編程應用savefiledialog不克不及彈出保留窗體的處理辦法

編輯:C#入門知識

win7中C#的winForm編程應用savefiledialog不克不及彈出保留窗體的處理辦法。本站提示廣大學習愛好者:(win7中C#的winForm編程應用savefiledialog不克不及彈出保留窗體的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved