关于Clipboard剪切板获取值为NULL问题解决方法

一、问题

在word转换成图片时,遇到word文件内容copy到剪切板后,使用但剪切板内容获取值为null。本人之前介绍的C#操作word文档和转换成图片随笔中WordtoImage()方法出现问题。

 document.Content.CopyAsPicture(); //拷贝到粘贴板
 IDataObject data = Clipboard.GetDataObject();//Q:null?

二、解决方案

(1)在winform中把这个方法放入一个按click事件中。

之前介绍的word转换成图片,是编写winform项目的一个demo,这个剪切板值可以正常获取值。但是把这个方法封装成一个静态帮助类时,这里就会出错。

这里给出word转换成图片,在winform中按钮click事件的方法代码:

  private void btnWordToIamge_Click(object sender, EventArgs e)
        {
            List<Bitmap> offbmList = new List<Bitmap>();
            Bitmap[] wordbm;
            string OutputPath = @"************";//图片保存路径

            wordbm = wordDocement.WordtoImage(filepath);
            int i = 0;
            foreach (var item in wordbm)
            {
                i++;
                item.Save(OutputPath + i.ToString() + "." + "Jpeg", ImageFormat.Jpeg);
            }
        }

这里WordtoImage()方法已在我的博客 C#操作word文档和转换成图片 给出,这里就不在重复,这里只是解决Clipboard为null问题。

二、在线程中使用单线程单元,

对于STA和MTA,本人刚刚接触,看了些许的资料,同时转载一一篇STA和MTA的区别的文档,勉强理解点。

针对把WordtoImage()方法和word操作方法一起封装后,剪切板无法得到值,在外部调用WordtoImage()方法时需开启线程....等

话不多说直接上代码:

Thread th_wordprocess = new Thread(new ThreadStart(WordOperate));
th_wordprocess.SetApartmentState(ApartmentState.STA);//这句是关键 th_wordprocess.Start();

然后在WordOperate(),调用WordtoImage()方法

原文地址:https://www.cnblogs.com/machenghu/p/6489873.html