多线程下调用ShowDialog时异常原因及解决办法

2023-05-16

提示在可以调用OLE之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute

导入导出功能,在调用ShowDialog时的错误,解决办法如下:

WinForm窗体的入口点:

复制代码


        /// <summary>
        /// 应用程序的主入口点加入 [STAThread]。
        /// </summary>
        [STAThread]
        private static void Main(String[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LoginForm());
        }     

复制代码

修改如下:Thread线程调用SetApartmentState(ApartmentState.STA)设置 //重点

                 此种报错情况下就不能用Task创建线程了,因为Task没有SetApartmentState方法

复制代码


    public string importPath=""; //全局变量,用于显示导入文件路劲

        private void btnImport_Click(object sender, EventArgs e)
        {
            Thread importThread = new Thread(new ThreadStart(ImportDialog));
            importThread.SetApartmentState(ApartmentState.STA); //重点
            importThread.Start();
            txtImportPath.Text = importPath;
        }
        public void ImportDialog()
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Excel文件|*.xls;*.xlsx";
            if (open.ShowDialog() == DialogResult.OK)
            {
                importPath = open.FileName;

                ReadExcelToTable(importPath);
                UpdateArea();
            }
        }  

复制代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程下调用ShowDialog时异常原因及解决办法 的相关文章

  • C# 创建一个简单的WebApi项目

    一 创建Web API 1 创建一个新的web API项目 启动VS 2013 并在 开始页 选择 新项目 或从 文件 菜单选择 新建 然后选择 项目 在 模板 面板中选择 已安装模板 并展开 Visual C 节点 选择该节点下的 Web
  • C# 编写Web API

    1 创建Web API项目 打开VS2012 gt FILE gt New gt Project gt Web gt ASP NET MVC 4 Web Application 修改名字为WebAPIApplication 单击OK 在Pr
  • C# WebApi 返回JSON类型

    在默认情况下 当我们新建一个webapi项目 会自动返回XML格式的数据 如果我们想返回JSON的数据 可以设置下面的三种方法 nbsp 1 不用改配置文件 在Controller的方法中 直接返回HttpResponseMessage p
  • c#通过HttpClient来调用Web Api接口

    lt summary gt HttpClient实现Post请求 异步 lt summary gt static async void dooPost string url http localhost 52824 api register
  • c#使用HttpClient调用WebApi

    调用WebApi 可以利用HttpClient来进行Web Api的调用 由于WebA Api的调用本质上就是一次普通的发送请求与接收响应的过程 xff0c 所有HttpClient其实可以作为一般意义上发送HTTP请求的工具 using
  • C#中通过HttpClient发送Post请求

    C 中HttpClient进行各种类型的传输 我们可以看到 尽管PostAsync有四个重载函数 但是接受的都是HttpContent 而查看源码可以看到 HttpContent是一个抽象类 那我们就不可能直接创建HttpContent的实
  • c#中WepAPI(post/get)控制器方法创建和httpclient调用webAPI实例

    一 xff1a WebAPI创建 using System using System Collections Generic using System Linq using System Net Http using System Text
  • c#中Task线程的用法

    1 Task的优势 ThreadPool相比Thread来说具备了很多优势 xff0c 但是ThreadPool却又存在一些使用上的不方便 比如 xff1a ThreadPool不支持线程的取消 完成 失败通知等交互性操作 xff1b Th
  • C# 中对象与JSON字符串相互转换的三种方法

    JSON JavaScript Object Notation JS 对象标记 是一种轻量级的数据交换格式 关于内存对象和JSON字符串的相互转换 xff0c 在实际项目中应比较广泛 xff0c 经过一番搜索 xff0c 找到如下三种方法来
  • 解决VM虚拟机中ubuntu系统上不了网的问题

    最简单的方式 关闭虚拟机在对应的虚拟机上右键 xff0c 点击设置 xff0c 找到网络适配器 xff0c 点击移除 xff0c 再次点击添加 xff0c 将网络适配器再次添加回来 xff0c 点击确定重启虚拟机 如果第一种方式解决不了问题
  • C#中创建圆形/按钮(使用重绘)

    创建圆形按钮挺简单的 public class EllipseButton Button protected override void OnPaint PaintEventArgs pevent GraphicsPath gPath 61
  • c#中控件重绘(放大缩小移动隐藏恢复后不消失)实例

    很重要 一定要重写并在在OnPaint 中用传入的pevent Graphics重绘 并且屏蔽掉父类的OnPaint方法 这样重绘后的图形不论控件怎么操作都不会消失了 using System using System Collection
  • WM_Paint 消息疑问解析

    1 系统何时发送WM PAINT消息 xff1f 系统会在多个不同的时机发送 WM PAINT 消息 xff1a 当第一次创建一个窗口时 xff0c 当改变窗口的大小时 xff0c 当把窗口从另一个 窗口背后移出时 xff0c 当最大化或最
  • Windows 消息ID及定义大全

    表A 1 Windows消息分布 消息范围 说 明 0 xff5e WM USER 1 系统消息 WM USER xff5e 0x7FFF 自定义窗口类整数消息 WM APP xff5e 0xBFFF 应用程序自定义消息 0xC000 xf
  • C++中消息机制阻塞实验

    VC6标准WIN32程序 xff0c Windows消息处理机制 xff1a 1 在注册窗口类时 xff0c 指定了消息处理函数WndProc 2 WinMain xff08 xff09 里有消息循环 xff1a while GetMess
  • C#中控件如何设置透明色

    设置窗体的TransparencyKey 属性 xff0c 为你想要变成透明的颜色 xff0c 比如 xff1a 你把窗体背景色设置成红色 xff0c 然后把TransparencyKey 设置成红色 xff0c 代码 xff1a this
  • SendMessage消息发送原理与死锁处理

    windows是一个消息驱动的系统 xff0c 也是个多任务调度系统 xff0c windows中的线程分为两类 xff0c GUI线程与Worker线程 xff0c 每个GUI线程会关联消息队列 xff0c 当消息处理顺序不当时 xff0
  • C#中PostMessage和SendMessage的参数传递实例

    用 PostMessage SendNotifyMessage SendMessageCallback 等异步函数发送系统消息时 xff0c 参数里不可以使用指针 xff0c 因为发送者并不等待消息的处理就返回 xff0c 接受者还没处理指
  • WindowsAPI中PostMessage与SendMessage的区别

    xff11 返回值意义的区别 xff0c 先看一下 MSDN 里的声明 xff1a LRESULT SendMessage HWND hWnd UINT Msg WPARAM wParam LPARAM lParam BOOL PostMe
  • vnc viewer中文版,超好用的几款vnc viewer中文版

    现在 市面上有着各种各样的vnc viewer中文版软件 xff0c 在日常工作中 xff0c 也不可避免的会使用到vnc viewer中文版软件 毕竟对于我们国人来说 中文版软件更便于使用 你会选择哪一款vnc viewer中文版软件呢

随机推荐