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()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)