STAThread 和 MTAThread】的更多相关文章

本文讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别. 1. COM中的公寓 1.1 基本规则 公寓是COM组件的运行环境,日常生活中公寓是用来住人的,COM中的公寓是用来住COM组件的对象的,每个COM对象必须且只能位于一个公寓中:单线程公寓(STA)或多线程公寓(MTA). 每个进程可以有0或多个STA. 每个进程可以有0或1个MTA. 一个线程只能关联到一个公寓.因此所有关联到MTA的线程都是关联到进程唯一的一个MTA.…
ref:http://blog.csdn.net/dyllove98/article/details/9735955 1 COM中的公寓 本文讨论进程内COM组件.以一个示例直观演示STAThread和MTAThread的作用和区别. 1.1 基本规则 公寓是COM组件的运行环境,日常生活中公寓是用来住人的,COM中的公寓是用来住COM组件的对象的,每个COM对象必须且只能位于一个公寓中:单线程公寓(STA)或多线程公寓(MTA). 每个进程可以有0或多个STA. 每个进程可以有0或1个MTA.…
STAThread:single threaded apartment 直译过来是:单线程单元套间 MTAThread:multiple threaded apartment 直译过来是:多线程单元套间 差别其实就是这个: 其他线程对STA中的COM对象的访问需要列集(marshal),通过列集,自动实现了多线程访问下的同步. 所有线程对MTA中的COM对象的访问不需要列集,直接访问,需要COM组件自身实现多线程下的同步. COM对象和客户端的组件模型设定, 决定最终的组件模型时怎样, 以下这篇…
C#中一些默认的预定义属性,见下表: 预定义的属性 有效目标 说明 AttributeUsage Class 指定另一个属性类的有效使用方式 CLSCompliant 全部 指出程序元素是否与CLS兼容 Conditional Method 指出如果没有定义相关联的字符串,编译器就可以忽略对这个方法的任何调用 DllImport Method 指定包含外部方法的实现的DLL位置 STAThread Method(Main) 指出程序的默认线程模型为STA MTAThread Method(Mai…
参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html这个大佬写的文章,我还是很喜欢的 https://www.cnblogs.com/mushroom/p/4575417.html https://blog.csdn.net/dyllove98/article/details/9735955这篇文章是讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别. C#5.…
Process.CloseMainWindow Method 通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程. 注解 进程执行时,其消息循环处于等待状态. 每次操作系统将 Windows 消息发送到该进程时,消息循环都会执行. 调用CloseMainWindow将发送一个请求来关闭主窗口,该窗口在格式正确的应用程序中将关闭子窗口,并为应用程序撤消所有正在运行的消息循环. 通过调用CloseMainWindow退出进程的请求不会强制应用程序退出. 应用程序可以在退出前要求用户进行验证,也可…
Posted on 2007-07-07 10:06 桦林 阅读(33100) 评论(10) 编辑 收藏 [STAThread]STAThread:Single     Thread     Apartment Thread.(单一线程单元线程)[]是用来表示Attributes: [STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA.用在其他方法上不产生影响.在aspx页面上可以使用Asp…
[STAThread]STAThread:Single Thread Apartment Thread.(单一线程单元线程)[]是用来表示Attributes: [STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA.用在其他方法上不产生影响.在aspx页面上可以使用AspCompat = "true" 来达到同样的效果.这个属性只在 Com Interop 有用,如果全部是 man…
转载:http://www.cnblogs.com/netdazhi/articles/1189549.html 每个Thread都有一个关于ApartmentState的属性,可以把它设置为:STA或者MTA,或者UNKNOWN.当你想指定工程的启动窗口的时候,你需要在该窗口类中申明一个Main()方法,并为这个方法设置[STAThread]属性. [STAThread]是Single  Thread  Apartment单线程套间的意思,是一种线程模型,用在程序的入口方法上(在C#和VB.N…
[STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA. [STAThread]是声明开始线程用的.有时候要用一个第三方组件,如果不加[STAThread]的话,组件上有一些功能是无法使用的.加上[STAThread]就可以用了.http://zhidao.baidu.com/link?url=8IM8CeM029PpTckelYpgsd3RJYECzCjTq3zFkvxHYdTLLBZvM6…
stathread这种线程是给COM组件使用的线程,如果不适用com对象 如果com对象标记为sta的,则它就是单线程运行的 stathread 组件线程遗留的标签…
在编写 WPF 程序时,会发现 Main 方法上方会标记 [STAThread] . 作用:STAThread 标记主线程,也就是 UI 线程是 STA 线程模型. 1 什么是 STA ? 与 STA(Single-Thread Apartment)对应的,是 MTA(Mutil-Thread Apartment),是 COM 组件中的概念,用于指示一个 COM 组件的线程模型. 详细可以参看: 多线程调用COM组件的体会(CoInitialize) - 庄园 - 博客园 关于COM组件线程模型…
一.异常提示 不支持一个 STA 线程上针对多个句柄的 WaitAll. 出错界面如下图: 二.解决方法 先直接上解决方案吧.其实解决方法很简单如下面的代码直接把main函数的[STAThread]属性注释掉就行了.或者把[STAThread]替换成[MTAThread] using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Win…
property是指类向外提供的数据区域.而attribute则是描述对象在编译时或运行时属性的,分为固有型和用户自定义型,其中用户自定义型可以利用Reflection在运行期获取.这两者是有本质区别的. 资料上说二者一个是service的属性,而另一个是interface的. 第一种好象更准确,摘要如下: 在很多人的脑海中,Attribute就是类的属性,Property呢?好像也是类的属性?因此有很多人不加区别的统一称为类的属性,尤其是在写中文文章的时候.这种心理是典型的鸵鸟心态,眼不见为净…
[AttributeUsage] 其实AttributeUsage类就是描述了一个定制特性如和被使用. C# AttributeUsage的使用要明白: AttributeUsage有三个属性,我们可以把它放置在定制属性前面.第一个属性是: ◆ValidOn 通过这个属性,我们能够定义定制特性应该在何种程序实体前放置.一个属性可以被放置的所有程序实体在AttributeTargets enumerator中列出.通过OR操作我们可以把若干个AttributeTargets值组合起来. ◆Allo…
[csharp] view plaincopy using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsApplication1 { static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [MTAThread] //不支持一个 STA 线程上针对多个句柄的 WaitAll.解…
delegate--委托 (可以把委托看成用来执行方法的一个东西) eg: namespace delegateTest{ delegate double MathsOp(double x); class Program { public class MyDelegate { public static double MultiplyBy2(double x) { return x * 2; } } [STAThread]//[STAThread] attribute指示应用程序的 COM 线程…
当Canvas上的UI元素变化时,会重新生成网格并向GPU发起绘图调用,从而显示UI.划分画布:1.每块画布上的元素都与其他画布的元素相隔离,使用?工具来切分画布?,从而解决ui的批处理问题.2.也可以通过嵌套画布来解决,这样能允许设计师创建大型分层ui,子画布内容与父画布和同级画布相互隔离.保持自带几何体,执行自己的批处理.3.当使用子画布分离画布时,尝试根据画布更新时间来分组.例如:分离动态元素和静态元素. ==========================================…
一.System [AttributeUsage]:指定另一特性类的用法.无法继承此类. [CLSCompliant]:指示程序元素是否符合公共语言规范 (CLS).无法继承此类. [ContextStatic]:封装有关与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. [Flags]:指示可以将枚举作为位域(即一组标志)处理. [LoaderOptimization]:用于设置可执行应用程序的主方法的默认加载程序优化策略. [MTAThread…
开源 程序设计 常用组件 加载图片,播放音乐.视频,摄像头拍照 文件读写(txt.xml.自定义文件格式(后缀名)) 串口通信 稳定的串口读写:http://blog.csdn.net/kolvin2008/article/details/52833480 窗口通信类SerialPort:https://www.cnblogs.com/BookCode/p/5583853.html 用C#一步步写串口通信:http://blog.csdn.net/kasama1953/article/detai…
线程模式是微软的COM基础中的极其重要的概念.一定要吃透!初始一个STA套间实际上是相当于开了一个消息窗口,所有调用经此窗口过程调度到组件内. [STAThread] 可以理解成CoInitialize(NULL); 初始一个STA套间实际上是相当于开了一个消息窗口,所有调用经此窗口过程调度到组件内.[MTAThread]可以理解成CoInitializeEx(NULL,COINIT_MULTITHREADED )这经常是一个对初入com大门的人来说,有一定难度但必须过的一道关. 概念 线程模型…
一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目…
本章简言 上一章笔者讲到关于IO文件操作类,了解如何处理文件流.从这一章开始笔者将讲解相对比较高级的知识点.而本章笔者就对WinForm开发的知识点进行讲解和引导.现在很多业务都是面向于B/S模式的开发,JAVA也不另外.所以JAVA的程序员对J2EE部分的知识非常了解.却对J2SE的知识点半知半解.甚至有一些只是听过而以.笔者在进入JAVA企业开发之前也曾用过Awt和Swing开发PC端的应用程序.类似于库存管理和企业通信等应用.相信做过的人都明白--小小的一个业务就花掉很多时间才能开发出来.…
上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整的窗体类型名称formTypeName来动态创建窗体对象,调用不够方便,且该方法创建的窗体不受各模块注册窗体类型AppFormTypes限制,也就是可以创建任何FORM,存在不确定性: 2.动态创建的窗体对象无法直接对其公共属性或公共方法进行调用 3.主应用程序中的LoadComponents方法是通过指定文…
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows Mobile 应用程序使用的方法. 主要是通过 System.Threading.Mutex 类 和 Win32 API 来实现,下面就是各自的代码,调用示例在最后面. 普通 C# 应用程序 主要是 Windows 窗体应用程序和控制台程序. 1. 使用 System.Threading.Mute…
异常: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 只有将调试器附加到该进程才会引发此异常. 方法1: class Program { /// <summary> /// 图片资料文件同步 /// </summary> /// <param name="args"></param> [STAThread] //加这个属性,创建并进入单…
捕获控制台(console)关闭事件: 1.Ctrl+C信号: 2.Ctrl+Break信号: 3.用户系统关闭Console时: 4.用户退出系统时: 5.系统将要关闭时: using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; namespace ConsoleApplication2 { public delegate bool Console…
https://www.codeproject.com/articles/31236/how-to-update-assembly-version-number-automaticall Examples AssemblyInfoUtil.exe -set:3.1.7.53 "C:\Program Files\MyProject1\AssemblyInfo.cs" Set the version string to "3.1.7.53". AssemblyInfoU…
1: //在写一些服务型的软件的时候,你可能不希望一个操作系统里有两个副本在运行,这样也许会扰乱你的操作.这时,你就需要限制程序的副本.下面的这个方法,很简单的就可以实现上述功能. using System; using System.Collections.Generic; using System.Windows.Forms; using System.Diagnostics; namespace TestProcessCount { static class Program { /// <…
在做Winfrom程序时,有时会遇到一个异常,可是这个异常不知道在什么地方发生的,程序会自动关闭,然后什么也没有了,在网上找到了一种方法,用来捕捉这种异常. 出现这种情况的原因是在程序中某些地方考虑不周全,有异常的情况没有考虑到,但是CLR不会在出错时给出提示(注:有些错误没有捕捉的话会自动弹出错误框,让用户选择关闭程序还是继续),所以就出了事了... 这时有一种方法来得到这种异常: /// <summary> /// 应用程序的主入口点. /// </summary> [STAT…