zoukankan      html  css  js  c++  java
  • C# 线程间不能调用剪切板的问题

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

    第一步:

    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;

    }

  • 相关阅读:
    jQuery Mobile动态刷新页面样式
    IE10下阿里旺旺无法快速登录解决办法
    JS复制内容到剪贴板: 兼容IE、Firefox、Chrome、Safari所有浏览器【转】
    python sftp ftp 造轮子,实现多个方法
    synergy ubuntu18.04 windows10
    爬虫之js破解 非常详细
    scrapy的useragent与代理ip
    Xpath的string(.)用法
    selenium cookie 登录
    scrapy爬取迅雷电影天堂最新电影ed2k
  • 原文地址:https://www.cnblogs.com/ching2009/p/4293593.html
Copyright © 2011-2022 走看看