zoukankan      html  css  js  c++  java
  • 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();
            }

    问题得到解决

  • 相关阅读:
    memcache和memcached区别
    C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论
    高手问答精选:Go 语言 —— 云计算时代的 C 语言(类似于一个FAQ)
    Delphi XE5 Android 调用手机震动(通过JObject测试是否支持震动)
    Delphi Android 将Google ZXing 整合(调用Jar文件)
    Delphi Android ActivityManager(提供了接口, 利用它可以方便的对Memory, Processes, Task, Service 等进行管)
    Azure 云 Web 应用程序
    C#由变量捕获引起对闭包
    React.js学习
    Web API
  • 原文地址:https://www.cnblogs.com/verna/p/1955276.html
Copyright © 2011-2022 走看看