C# 在WPF应用程序中设置数据后,如何在剪贴板中维护数据

C# 在WPF应用程序中设置数据后,如何在剪贴板中维护数据,c#,wpf,clipboard,C#,Wpf,Clipboard,我正在尝试将剪贴板的文本值设置为.NET4.7.2上WPF应用程序中字符串变量的值。如果我调试应用程序并在保存剪贴板值后立即停止执行,那么该值就在剪贴板中,我可以按预期粘贴它。如果我继续执行,那么该值将以某种方式被擦除。例如,这是我可以用来测试的代码: public void CopyToClipboard() { string temp = "test\ntest\ntest"; System.Windows.Clipboard.SetText(temp); } 如您所见,有

我正在尝试将剪贴板的文本值设置为.NET4.7.2上WPF应用程序中字符串变量的值。如果我调试应用程序并在保存剪贴板值后立即停止执行,那么该值就在剪贴板中,我可以按预期粘贴它。如果我继续执行,那么该值将以某种方式被擦除。例如,这是我可以用来测试的代码:

public void CopyToClipboard()
{
    string temp = "test\ntest\ntest";
    System.Windows.Clipboard.SetText(temp);
}
如您所见,有三行应该粘贴。当我在保存到剪贴板后立即停止执行时,我将看到如下输出:

test
test
test
如果我继续执行(通过点击F5或Visual Studio中的“继续”按钮),那么当我粘贴时,会得到三行“\t”选项卡。因此,我的三行仍然存在,但文本已被删除


谁能帮我解决这个问题。是什么导致我丢失剪贴板中的数据?

我编写了一个快速Linqpad脚本,它只包含以下行:

System.Windows.Clipboard.SetText(“你好”)


我的剪贴板被成功设置为“Hello”,并在程序退出后保持这种状态。您的应用程序中是否有其他内容正在修改剪贴板?

我编写了一个快速Linqpad脚本,它只包含以下行:

System.Windows.Clipboard.SetText(“你好”)

我的剪贴板被成功设置为“Hello”,并在程序退出后保持这种状态。应用程序中是否有其他内容正在修改剪贴板?

请检查此项

剪贴板类只能在设置为单线程的线程中使用 公寓(STA)模式。要使用此类,请确保 使用STAThreadAttribute属性标记

检查这个

剪贴板类只能在设置为单线程的线程中使用 公寓(STA)模式。要使用此类,请确保 使用STAThreadAttribute属性标记


我不相信文本被删除了,正确的词应该是“消毒”。从MS站点:“非Windows演示基金会(WPF)完全信任应用程序可以检查剪贴板上的ApvestType格式,并在适当的情况下对XAML进行消毒。”我同意,我认为这是正在发生的事情,因为我仍然有可用的线路。所以,问题是,我如何克服这个问题,以便在复制数据时粘贴数据?我不相信文本已被删除,正确的单词应该是“消毒”。从MS站点:“非Windows演示基金会(WPF)完全信任应用程序可以检查剪贴板上的ApvestType格式,并在适当的情况下对XAML进行消毒。”我同意,我认为这是正在发生的事情,因为我仍然有可用的线路。所以,问题是,我如何克服这个问题,以便在复制数据时粘贴数据?我选中了,没有其他东西更新剪贴板。我的应用程序是一个WPF应用程序,因此我认为它处理剪贴板的方式有点不同。我认为@Jawad最接近答案。我认为文本正在被净化,但我不知道如何让文本在粘贴时保持不被净化。我检查了,没有其他东西在更新剪贴板。我的应用程序是一个WPF应用程序,因此我认为它处理剪贴板的方式有点不同。我认为@Jawad最接近答案。我认为文本正在被净化,但我不知道如何让文本在粘贴时保持不被净化。是的,我检查了,Main方法有stathread属性。我认为最大的问题是这是一个WPF应用程序。是的,我检查过了,Main方法上有stathread属性。我认为最大的问题是这是一个WPF应用程序。
public String SwapClipboardHtmlText(String replacementHtmlText)
{
    String returnHtmlText = null;
    if (Clipboard.ContainsText(TextDataFormat.Html))
    {
        returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
        Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
    }
    return returnHtmlText;
}