Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言处理剪贴板的优化方法#_C#_.net_Windows - Fatal编程技术网

C# C语言处理剪贴板的优化方法#

C# C语言处理剪贴板的优化方法#,c#,.net,windows,C#,.net,Windows,正如许多人可能知道的,Clipboard.SetText有失败的可能性,原因是剪贴板已被多个UI应用程序使用 解决这个问题的一个好方法是使用剪贴板.SetDataObject(s,false,x,t)。这种方法通过将剪贴板复制失败的概率限制在很小的数量来限制问题,但是它并不能完全解决问题(我们仍然错过了一个更改) 另一方面,Windows操作系统,在任何编辑器中用于处理和粘贴的内置方法,都不会像预期的那样失败 所以我的问题是,有人知道Windows是如何实现Clipboard.Copy()以便在

正如许多人可能知道的,
Clipboard.SetText
有失败的可能性,原因是剪贴板已被多个UI应用程序使用

解决这个问题的一个好方法是使用剪贴板.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
            {

            }
        }

我有过类似的情况,在将内容复制到剪贴板后,我无法获得它,同样,我调整了代码,重试复制三次,之后我发现问题减少了,如果问题仍然存在,我通知用户再次重试复制内容

 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;
    }
private bool TryCopyToClipboard(字符串内容)
{
int i=0;
bool IsCopied=false;

虽然(我认为您需要更具体地说明您试图解决的问题。Windows没有实现.NET方法-.NET方法是在CLR中实现的(在这种情况下可能调用本机Win32方法)我从来没有见过剪贴板。SetText
或SetDataObject失败。你如何复制它?我会在失败的地方添加代码。在上面的代码中,我曾经有Cliboard.SetText(),我有50%的数据对象丢失,只丢失了几次,但我仍然丢失了。。