C#實戰025:控制檯呼叫Forms視窗程式
阿新 • • 發佈:2018-12-06
今天寫socket檔案傳輸時要用到選擇檔案功能,那就就要在控制檯狀態下彈相應的視窗,這樣才能方便選擇自己所需要的檔案,但是用控制檯呼叫Froms視窗很少有人用,找半天都找不到方法(比如說我們要開啟選擇檔案的視窗)。
在Windows窗體程式中藥呼叫窗體程式只要直接將工具箱中的控制元件直接拖拽到Forms中即可,而要彈出開啟選擇檔案的視窗,只要在相應的按鈕中寫入以下程式碼即可實現:
OpenFileDialog open = new OpenFileDialog(); open.Filter = "圖片檔案(*.png;*.jpg;*.bmp;*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg"; if (open.ShowDialog() == DialogResult.OK) { string electedText = open.SafeFileName; }
但是在控制檯中同樣如痴呼叫該方法卻無法彈出開啟選擇檔案的對話方塊,總是報錯:
翻譯:在進行OLE呼叫之前,必須將當前執行緒設定為單執行緒單元(STA)模式。確保您的主函式在其上標記了StaseRead屬性。只有將偵錯程式附加到程序中時才會引發此異常。
但是我們直接呼叫應用程式中的訊息提示框卻能實現:
MessageBox.Show("C#實戰024:控制檯呼叫Froms視窗程式");
這裡有個重點, 必須將當前執行緒設定為單執行緒單元(STA)模式
所以我在程式的入口方法上指定當前執行緒為單執行緒單元(STA)模式:[STAThread]
STAThread:Single Thread Apartment Thread.(單一執行緒單元執行緒)
[]是用來表示Attributes;
這裡寫了些OpenFileDialog的一些常用到的屬性
class Program { [STAThread] //預設執行緒模型是單執行緒單元 (STA) 模式 static void Main(string[] args) { OpenFileDialog open = new OpenFileDialog(); open.Title = "請選擇文字"; //開啟的檔案選擇對話方塊上的標題 open.Filter = "文字檔案(*.txt)|*.txt|所有檔案(*.*)|*.*";//設定檔案型別 open.InitialDirectory = @"D:\project\";//預設開啟目錄 open.FilterIndex = 1;//設定預設檔案型別顯示順序 open.RestoreDirectory = false;//是否記憶上次開啟的目錄 open.Multiselect = true;//是否允許多選 if (open.ShowDialog() == DialogResult.OK)//按下確定選擇的按鈕 { string[] filename = open.FileNames;//獲取多個檔案的路徑及檔名並存入陣列 MessageBox.Show(filename[0]); MessageBox.Show(filename[1]); MessageBox.Show(open.FileName); //獲取路徑及檔名 MessageBox.Show(open.SafeFileName);//獲取檔名 } } }
當然別忘了新增引用:using System.Windows.Forms;
這樣我們就可以在控制檯呼叫 using System.Windows.Forms中的窗體了,想用其他的窗體如法炮製即可。
首發百度經驗: C#實戰024:控制檯呼叫Forms視窗程式