子线程使用FolderBrowserDialog的问题延伸

Q:子线程如何使用FolderBrowserDialog

A:

private void button1_Click(object sender, EventArgs e)
    ...{
      System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(test));
      s.ApartmentState = System.Threading.ApartmentState.STA;
      s.Start();
    }
  
    public void test()
    ...{
      System.Windows.Forms.FolderBrowserDialog dlg = new FolderBrowserDialog();
      dlg.ShowDialog();
    }

以上代码简单的演示了FolderBrowserDialog在子线程中的使用,其中设置线程的ApartmentState为System.Threading.ApartmentState.STA是关键的语句。在.net2.0中应该使用

s.SetApartmentState(System.Threading.ApartmentState.STA);

如果没有上述设置会报如下错误

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。

如果你了解com的线程模型的话,应该已经清楚上面的问题根本了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, thread
, system
, sta
, richardm sta
, folderbrowserdialog
threading
folderbrowserdialog、folderbrowserdialog1、browserfolder.js下载、browserfolder.js、openfolderdialog,以便于您获取更多的相关知识。

时间: 2024-09-17 03:29:52

子线程使用FolderBrowserDialog的问题延伸的相关文章

main-java 子线程结束结束 内部子线程也结束 具体看代码注释

问题描述 java 子线程结束结束 内部子线程也结束 具体看代码注释 import java.util.ArrayList; import org.junit.Test; /** 代码很简单的 就是起了一个线程 然后在一个list里面放了1000个数字 然后打印以下 但是test方法 用junit起的 不能完全打印 而main可以 最终是想要使得这个test方法能和main的效果一样 * */ public class TestSub { @Test public void test() { /

iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别?

问题描述 iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别? iOS 异步网络请求 和 把 同步网络请求放在子线程有什么区别? 解决方案 那就是异步和同步的问题咯,,异步的话是不会等待请求完成能继续执行下面的程序,,而同步会等待请求的完成,在继续执行下面的 解决方案二: 同步放子线程效果跟异步达到的类似.只是一个是API原生支持,一个是你自己代码来实现 解决方案三: 同步放子线程效果跟异步达到的类似.只是一个是API原生支持,一个是你自己代码来实现 解决方案四: 同步放子线程效果跟

Android任意时刻从子线程切换到主线程的实现

引入 在Android开发中常常会遇到网络请求,数据库数据准备等一些耗时的操作:而这些操作是不允许在主线程中进行的.因为这样会堵塞主线程导致程序出现未响应情况. 所以只能另起一个子线程进行这些耗时的操作,完成后再显示到界面.众所周知,界面等控件操作只能在主线程中完成:所以不可避免的需要从子线程切换到主线程. 方法 对于这样的情况在Android 中比较常见的是使用AsynTask类或者 Handler来进行线程切换:而其中AsynTask是官方封装的类,较为简单,效率也比较可以,但是并不适合所有

C#子线程的控件操作问题解析

有关C#子线程的控件操作 一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线 程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是 不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了 Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作. 现在用一个用线程控制的进程条来说明,大致的步骤如下: 1.创建Invoke函数,大致如下: /// < summary> /// Delegate function to be invok

C#利用子线程刷新主线程

使用线程操作 1.实时显示当前时间 2.输入加数和被加数,自动出现结果 分析:两个问题解决的方式一致,使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果   using System; using System.Threading; using System.Windows.Forms; namespace WinThread { public partial class frmMain : Form { public frmMain() { InitializeComponent(

【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目

备份短信和添加短信 操作系统短信的uri: content://sms/ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.backupsms" android:versionCode="1

子程序建立socket崩溃-安卓下建立socket就崩溃,分到子线程仍然不行,求助啊

问题描述 安卓下建立socket就崩溃,分到子线程仍然不行,求助啊 原代码如下,如果我不用BUTTON去触发的话是可以建立SOCKET的,但是用上BUTTON,把建立SOCKET的方法放到子线程中,仍然exception会显示不能再主线程中使用网络操作,真心求解为什么,看了2天了,刚学JAVA,不太理解. package com.example.xlguang.wifi; import android.os.Bundle; import android.os.Handler; import an

Winform子线程开启的窗体无法响应DragEnter事件?

问题描述 Winform子线程开启的窗体无法响应DragEnter事件? 本来是在Program.Main里面直接用Application.Run显示一个窗体,可以正常响应DragEnter事件,但是以如下方法显示该窗体的话,就无法正常响应DragEnter事件了,请问各位大神怎么破? 解决方案 好吧,我想到了另一个办法,不用子线程启动也可以关闭一个Form 解决方案二: 不要把界面放在额外的线程中运行,这是常识.天哪,你是从哪里学的C#. 解决方案三: ..囧,UI,都不是线程安全的

c++中如何将子线程的参数传回主线程

问题描述 c++中如何将子线程的参数传回主线程 1C DWORD WINAPI threadFunction(LPVOID pArg) //返回值进程id(dword类型) 参数类型 LPVOID{ tNum myNum = *((tNum *)pArg); //将参数转化成int型 EnterCriticalSection(&gCS); // 进入临界区 myNum.string_back = FuzzyHash(myNum.string_in); LeaveCriticalSection(&a