OpenFileDialog 类的ShowDialog() 错误的解决
首先,一個類里,有個linkLabel1
private OpenFileDialog openFileDialog1;
private DialogResult result;
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
??????? {
??????????? openFileDialog1 = new OpenFileDialog();
??????????? string patch = Application.StartupPath + "\\LOG\\";
??????????? openFileDialog1.InitialDirectory = patch;
??????????? openFileDialog1.Filter = "xls files (*.xls)|*.xls";
????????????result = openFileDialog1.ShowDialog();
??????????? if (result == DialogResult.OK)
??????????? {
??????????????? if (openFileDialog1.FileName != "")
??????????????? {
??????????????????? Process.Start(openFileDialog1.FileName);
??????????????? }
???????????????
??????????? }
???????????
??????? }
就會報?
在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式。請確保您的 Main 函數帶有 STAThreadAttribute 標記。 只有將調試器附加到該進程才會引發此異常。
在測試小程序里沒有問題,當移到大程序里就這樣的問題了。可能是線程多的原因。解決辦法就是添加線程,代碼如下
private Thread invokeThread;
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
??????? {
??????????? openFileDialog1 = new OpenFileDialog();
??????????? openFileDialog1.InitialDirectory = patch;
??????????? openFileDialog1.Filter = "xls files (*.xls)|*.xls";
??????????? invokeThread = new Thread(new ThreadStart(InvokeMethod));
??????????? invokeThread.SetApartmentState(ApartmentState.STA);
??????????? invokeThread.Start();
??????????? invokeThread.Join();
??????????? if (result == DialogResult.OK)
??????????? {
??????????????? if (openFileDialog1.FileName != "")
??????????????? {
??????????????????? Process.Start(openFileDialog1.FileName);
??????????????? }
??????????? }
??????? }
private void InvokeMethod()
??????? {
??????????? result = openFileDialog1.ShowDialog();
??????? }
問題得到解決
轉載于:https://www.cnblogs.com/verna/archive/2011/02/15/1955276.html
總結
以上是生活随笔為你收集整理的OpenFileDialog 类的ShowDialog() 错误的解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeapFTP 注册码
- 下一篇: Rails之格式化价格方法