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#法式設計有所贊助。