首页 > 学院 > 开发设计 > 正文

C#[ STAThread]

2019-11-08 03:10:03
字体:
来源:转载
供稿:网友
每个Thread都有一个关于ApartmentState的属性,可以把它设置为:STA或者MTA,或者UNKNOWN。当你想指定工程的启动窗口的时候,你需要在该窗口类中申明一个Main()方法,并为这个方法设置[STAThread]属性。

[STAThread]是Single  Thread  Apartment单线程套间的意思,是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。用在其他方法上不产生影响。在aspx页面上可以使用AspCompat = "true" 来达到同样的效果。这个属性只在  Com  Interop  有用,如果全部是  managed  code  则无用。简单的说法:[STAThread]指示应用程序的默认线程模型是单线程单元 (STA)。启动线程模型可设置为单线程单元或多线程单元。如果未对其进行设置,则该线程不被初始化。也就是说如果你用的.NET Framework,并且没有使用COM Interop,一般不需要这个Attribute。其它的还有MTA(多线程套间)、Free  Thread(自由线程)。单线程套间,简单来说所有对于单线程套间中对象的访问都是通过消息来传递的,所以同一时间只有一个线程能够访问单线程套间中的对象。例如:class MainClass    {        [STAThread]        static void Main(string[] args)        {            Teacher teacher = new Teacher();            Student student = new Student();            student.AdviseDelegateInstance = new Student.AdviseDelegate(teacher.Advise);            Console.WriteLine("Student got 49");            student.SetScore(49);            Console.WriteLine("Student got 87");            student.SetScore(87);            Console.ReadLine();        }    }表示这个Main程序被一个单线程套间包住,且Main的执行,一次只能被一个线程占用,这个线程未执行完,别的线程是没办法调用的。

分类: C#
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表