C# 设置为单线程单元(STA)模式

C# 设置为单线程单元(STA)模式,第1张

Invoke((EventHandler)delegate { test()})

public void test()

{

openFileDialog1.Filter = "图片文件|*.bmp*.png*.jpg*gif"//显示所有图片文件

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

pictureBox1.Image = Image.FromFile(openFileDialog1.FileName)

if (File.Exists(FilePath))

{

System.IO.File.Delete(FilePath)

System.IO.File.Copy(openFileDialog1.FileName, FilePath)

}

}

}

[STAThread]

STAThread:Single Thread Apartment Thread.(单一线程单元线程)

[]是用来表示Attributes;

[STAThread]

是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。用在其他方法上不产生影响。在aspx页面上可以使用AspCompat = "true" 来达到同样的效果。这个属性只在 Com Interop 有用,如果全部是 managed code 则无用。简单的说法:[STAThread]指示应用程序的默认线程模型是单线程单元 (STA)。启动线程模型可设置为单线程单元或多线程单元。如果未对其进行设置,则该线程不被初始化。也就是说如果你用的.NET Framework,并且没有使用COM Interop,一般不需要这个Attribute。其它的还有MTA(多线程套间)、Free Thread(自由线程)。

[STAThread] attribute指示应用程序的 COM 线程模型是单线程单元。

而于此对应的多线程单元则是 [MTAThread] (多线程单元线程)

COM 线程模型只适用于使用 COM interop 的应用程序。如果将此属性应用到不使用 COM interop 的应用程序,将没有任何效果。

COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件,则仅为 COM interop 初始化该线程。如果没有使用 COM interop,则不初始化该线程。

设置线程的ApartmentState属性为STA就行了,如下

private void button1_Click(object sender, EventArgs e)

{

th = new Thread(new ThreadStart(ImageCopy))

th.ApartmentState = ApartmentState.STA

th.Start()

}

Thread th

void ImageCopy()

{

Clipboard.Clear()

Clipboard.SetImage(pictureBox1.Image)

th.Abort()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11098426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存