应对剪贴板C#的最佳方法

时间:2013-11-19 13:58:39

标签: c# .net windows

正如你们许多人所知,Clipboard.SetText(s)有几个UI应用程序使用剪贴板的原因有失败的可能性。

一个很好的克服,这个问题是使用Clipboard.SetDataObject(s,false,x,t)。这种方法通过限制剪贴板复制失败的可能性来限制问题,但是它并没有完全解决问题(我们还有一个未命中的变化)。

另一方面,在任何编辑器中,用于复制和粘贴的构建方法的Windows操作系统都不会像预期的那样失败。

所以我的问题是,有人知道Windows如何实现Clipboard.Copy()以便在C#应用程序中使用吗?

string  result = result.Substring(x + 3, 24);
                Thread newThread = new Thread(ThreadMethod);
                newThread.SetApartmentState(ApartmentState.STA);
                newThread.Start();

 public void ThreadMethod()
        {
            try
            {
                if (result != null)
                {
                    Clipboard.SetDataObject(result, false, 5, 200);

                    keybd_event(0x11, 0, KEYEVENTF_KEYDOWN, 0);
                    keybd_event(0x56, 0, KEYEVENTF_KEYDOWN, 0);
                    keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0);
                    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0);
                    keybd_event(0x0D, 0, KEYEVENTF_KEYDOWN, 0);
                    keybd_event(0x0D, 0, KEYEVENTF_KEYUP, 0);
                }
            }
            catch
            {

            }
        }

1 个答案:

答案 0 :(得分:1)

我有类似的情况,在将内容复制到剪贴板后,我无法得到它,因为我调整了代码,重试了三次复制,之后我发现问题减少了,如果问题坚持然后我通知用户再次重新复制内容。

 private bool TryCopyToClipboard(string contents)
    {
        int i = 0;
        bool IsCopied = false;
        while (i <= 3)
        {
            try
            {
                System.Windows.Clipboard.Clear();
                System.Windows.Clipboard.SetText(Body);
                if (System.Windows.Clipboard.GetText().Length == Body.Length)
                {
                    IsCopied = true;
                    break;
                }
            }
            catch (System.Exception)
            {

            }
            finally
            {                   
                i++;
            }
        }

        return IsCopied;
    }