0

我试图从剪贴板中读取图像并将其保存在指定的文件夹中Clipboard.getImage()

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

4

2 回答 2

3

这是 STA 与 MTA 线程问题。您将无法从 MTA 线程访问剪贴板。以供参考:

这有效:

    [STAThread()]
    static void Main(string[] args)
    {
        Image img = Clipboard.GetImage();
        img.Save(@"c:\temp\myimg.png",System.Drawing.Imaging.ImageFormat.Png);
    }

这不是 - 空引用:

    [MTAThread()]
    static void Main(string[] args)
    {
        Image img = Clipboard.GetImage();
        img.Save(@"c:\temp\myimg.png",System.Drawing.Imaging.ImageFormat.Png);
    }

查看此线程以获得 STA 后台线程相关解决方案: 如何将后台工作线程设置为单线程单元?

于 2013-07-25T07:26:29.907 回答
0

当您尝试从线程内的剪贴板读取图像时,您必须将线程 ApartmentState 设置为 STA。尝试这个:

Thread t = new Thread(DoSomething());
t.SetApartmentState(ApartmentState.STA);
t.Start();
于 2014-12-10T10:34:03.127 回答