我试图从剪贴板中读取图片并使用Clipboard.getImage()
如果它是独立的,该功能可以正常工作。当我在一个线程中使用该函数时它无法正常工作。
答案 0 :(得分:3)
这是STA vs MTA线程问题。您将无法从MTA线程访问剪贴板。供参考:
这有效:
[STAThread()]
static void Main(string[] args)
{
Image img = Clipboard.GetImage();
img.Save(@"c:\temp\myimg.png",System.Drawing.Imaging.ImageFormat.Png);
}
这不是 - null引用:
[MTAThread()]
static void Main(string[] args)
{
Image img = Clipboard.GetImage();
img.Save(@"c:\temp\myimg.png",System.Drawing.Imaging.ImageFormat.Png);
}
看看这个线程的STA后台线程相关解决方案: How can I make a background worker thread set to Single Thread Apartment?
答案 1 :(得分:0)
当您尝试从线程内的剪贴板中读取图像时,必须将线程ApartmentState设置为STA。试试这个:
Thread t = new Thread(DoSomething());
t.SetApartmentState(ApartmentState.STA);
t.Start();