本文實例分析了win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法。分享給大家供大家參考。具體分析如下:
客戶端和服務器傳輸文件時, 服務器端都顯示發送成功了,但是到客戶端保存時,savefiledialog 保存對話框就是彈不來??。?/p>
仔細的檢查代碼好幾遍,邏輯上沒有錯誤。就是彈不出來,很無語了。就上網查了,查了很多資料,沒有什么頭緒。在查的過程中,我看見這樣的一句話“你前面都說了,你使用線程調用,那么這個線程是否為主線程?如果不是主線程,那么你應該把它交給主線程去處理”,然后我就用一個例子模擬了一下,確實有關系。
模擬的例子:
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#程序設計有所幫助。
新聞熱點
疑難解答