Clipboard.getImage无法在线程内工作

时间:2013-07-25 07:04:37

标签: c#

我试图从剪贴板中读取图片并使用Clipboard.getImage()

将其保存在指定的文件夹中

如果它是独立的,该功能可以正常工作。当我在一个线程中使用该函数时它无法正常工作。

2 个答案:

答案 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();