win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法
本文實(shí)例分析了win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法。分享給大家供大家參考。具體分析如下:
{
while (isRecMsg)
{
//準(zhǔn)備一個(gè)數(shù)組 準(zhǔn)備接收 服務(wù)端發(fā)來的數(shù)據(jù)
byte[] msgRec = new byte[1024 * 1024 * 2];
//接收服務(wù)端發(fā)來的數(shù)據(jù),此方法也會(huì)阻斷當(dāng)前線程,并返回接收的數(shù)據(jù)的長度
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://接收到 字符串消息
{
//將數(shù)據(jù)轉(zhuǎn)成字符串(要轉(zhuǎn)換的數(shù)組,開始轉(zhuǎn)換的下標(biāo),要轉(zhuǎn)換的數(shù)據(jù)長度)
string strRec = System.Text.Encoding.Default.GetString(msgRec, 1, recLength-1);
//將接收到的數(shù)據(jù)顯示在文本框中
ShowMsg(strRec);
break;
}
case 3://接收到 閃屏命令
{
ShakeWindow();
break;
}
}
}
}
客戶端和服務(wù)器傳輸文件時(shí), 服務(wù)器端都顯示發(fā)送成功了,但是到客戶端保存時(shí),savefiledialog 保存對(duì)話框就是彈不來?!!
仔細(xì)的檢查代碼好幾遍,邏輯上沒有錯(cuò)誤。就是彈不出來,很無語了。就上網(wǎng)查了,查了很多資料,沒有什么頭緒。在查的過程中,我看見這樣的一句話“你前面都說了,你使用線程調(diào)用,那么這個(gè)線程是否為主線程?如果不是主線程,那么你應(yīng)該把它交給主線程去處理”,然后我就用一個(gè)例子模擬了一下,確實(shí)有關(guān)系。
模擬的例子:
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(saveDialog);
t.IsBackground = true;
//t.ApartmentState = ApartmentState.STA;//缺少這句話,就會(huì)出錯(cuò)誤。
//不過以上這句在Vs 2010中顯示是被微軟否決的,過時(shí)的,雖然還能用。但是為了更好的兼容版本,微軟推出以下方法:
t.SetApartmentState(ApartmentState.STA); //即是在線程啟動(dòng)時(shí)設(shè)置它的單元狀態(tài),這里設(shè)置它的狀態(tài)為單線程單元
t.Start();
}
public void saveDialog()
{
SaveFileDialog result = new SaveFileDialog();
result.ShowDialog();
}
}
模擬的例子:缺少這句話【t.ApartmentState = ApartmentState.STA】,就會(huì)出錯(cuò)誤。但在vs2010中設(shè)置方式變?yōu)閠.SetApartmentState(ApartmentState.STA);//即是在線程啟動(dòng)時(shí)設(shè)置它的單元狀態(tài),這里設(shè)置它的狀態(tài)為單線程單元
同理 savefiledialog 保存對(duì)話框就是彈不來???是不是也是這個(gè)問題???經(jīng)過嘗試后,還真是這的問題。
就這么簡簡單單的一句話,就花費(fèi)了我兩個(gè)多小時(shí),但最后解決了,也很高興,并且在找的過程中收獲了不少。這就是有失必有得吧!
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作
這篇文章主要為大家詳細(xì)介紹了C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03C#實(shí)現(xiàn)批量Word轉(zhuǎn)換Html的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#批量Word轉(zhuǎn)換Html的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#棧和隊(duì)列的簡介,算法與應(yīng)用簡單實(shí)例
今天小編就為大家分享一篇關(guān)于C#棧和隊(duì)列的簡介,算法與應(yīng)用簡單實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10