关于多线程下访问系统剪贴板的异常
程序中
Clipboard.SetImage(bmp);
出现ystem.Threading.ThreadStateException: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。的异常
我main函数前边已经加了[STAThread]的标志
程序打开时由于读进内存的数据量有点多,反应有点慢,我加了一个窗体f1在f1里创建了原来程序加载窗体的方法
但原来窗体里菜单“复制为图片”菜单项出现上述异常
private void Frmloading_Load(object sender, EventArgs e)
{
mybitmap=new Bitmap("load.bmp");
this.Width = mybitmap.Width;
this.Height = mybitmap.Height;
this.StartPosition = FormStartPosition.CenterScreen;
thread1 = new Thread(new ThreadStart(FrmLogin));
//timer1.Enabled = true;
//timer1.Interval = 2000;
thread1.Start();
}
private void FrmLogin()
{
//timer1.Start();
Frmmain frmain = new Frmmain();
//frmain.Visible = false;
frmain.Show();
}
frmain的菜单出现上述异常
private void toolStripMenuItem8_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(30, 35);//创建图片
Graphics g = Graphics.FromImage(bmp);//创建画板
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 30, 35);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
if (obj1 != null)
{
//将文字写入图片
StringFormat strf = new StringFormat();
strf.Alignment = StringAlignment.Center;
strf.LineAlignment = StringAlignment.Near;
g.DrawString(obj1.Text, new Font("AYSDJW", 22), new SolidBrush(Color.Black), 15, 3, strf);
bmp.Save("picture.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
Clipboard.SetImage(bmp);//出现异常我该怎么办? Image img = Clipboard.GetImage();
g.Dispose();
bmp.Dispose();
}
}