博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 线程间不能调用剪切板的问题
阅读量:6249 次
发布时间:2019-06-22

本文共 1087 字,大约阅读时间需要 3 分钟。

最近做一个项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,当时特别纳闷,上网查资料,最后终于搞定,现将解决方法归纳如下:

第一步:

public void btnAutoFocus_Click(object sender,EventArgs e)

{

Thread myThread = new Thread(msc.AutoFocusArithmetic);

//注意,一般启动一个线程的时候没有这句话,但是要操作剪切板的话这句话是必需要加上的,因为剪切板只能在单线

//程单元中访问,这里的STA就是指单线程单元

myThread .SetApartmentState(ApartmentState.STA);  

myThread .Start();

}

第二步:还需要将Program启动类中

static class Program

    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]  //这句话保留,如果要在主线程中访问剪切板,这句式必须要的,如果要在子线程中访问剪切板,这个应该可以不要,但是默认是有的,不过这个我没有过不要这句话是什么结果,后面有时间测试之后再发博文
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }

第三步:这个是读取剪切板数据,

private Image GetCaptureImage()

{
        IDataObject iData = Clipboard.GetDataObject();
        Image img = null;
        if (iData != null)
        {
             if (iData.GetDataPresent(DataFormats.Bitmap))
             {
                  img = (Image)iData.GetData(DataFormats.Bitmap);
             }
             else if (iData.GetDataPresent(DataFormats.Dib))
             {
                  img = (Image)iData.GetData(DataFormats.Dib);
             }
        }
        return img;

}

转载于:https://www.cnblogs.com/as3lib/p/6418186.html

你可能感兴趣的文章
CentOS 配置***客户端
查看>>
线上应用故障排查之二:高内存占用
查看>>
老毛桃 win7
查看>>
第四次作业
查看>>
4196. [NOI2015]软件包管理器【树链剖分】
查看>>
Apache Spark源码走读之20 -- ShuffleMapTask计算结果的保存与读取
查看>>
Ext 4.2.1 教大家如何去规避ext-all和动态加载机制的优缺点
查看>>
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
jdbc
查看>>
百度地图需要的效果-有感
查看>>
查看 NPM、Yarn 全局安装的包
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
Nginx入门(2)反向代理和负载均衡
查看>>
MySQL库表状态查询
查看>>
【鲁班学院】干货分享!《面试必备之Mysql索引底层原理分析》
查看>>
第十一周项目0-是春哥啊
查看>>
poi做一个简单的EXCAL
查看>>
几种查询emacs帮助的办法
查看>>
Python_基础_(模块,time,random,os,sys,json,shelve,xml,序列化反序列化)
查看>>