正如你们许多人所知,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
{
}
}
答案 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;
}