Windows 8 Windows 8 Metro样式剪贴板异常

Windows 8 Windows 8 Metro样式剪贴板异常,windows-8,microsoft-metro,clipboard,Windows 8,Microsoft Metro,Clipboard,我开发了一个应用程序,可以用dispatchermer Tick()方法读取剪贴板数据。 每秒读取剪贴板数据 该应用程序在开发机器中(在调试或松弛模式下)不会引发异常,但是如果我在Win-RT平板设备上发布该应用程序,则在读取剪贴板时会出现异常,但奇怪的是,只有在“快照视图”模式下才会出现异常 在全视图模式下,它可以正常工作 例外情况是: "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))". 代码

我开发了一个应用程序,可以用
dispatchermer Tick()
方法读取剪贴板数据。 每秒读取剪贴板数据

该应用程序在开发机器中(在调试或松弛模式下)不会引发异常,但是如果我在Win-RT平板设备上发布该应用程序,则在读取剪贴板时会出现异常,但奇怪的是,只有在“快照视图”模式下才会出现异常

在全视图模式下,它可以正常工作

例外情况是:

"Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))". 
代码看起来像

private async Task Populate()
{
    try
    {

        var clipboardText = await this.GetTextFromClipboard();
           .....
    }
    catch (Exception ex)
    {
        this.HandleException("Error occured while reading clipboard: ", ex);
    }
 }


private async Task<string> GetTextFromClipboard()
{
    var dataPackageView = Clipboard.GetContent(); // Exception occurs here!!!
    if (dataPackageView.Contains(StandardDataFormats.Text))
    {
        var clipboardText = await dataPackageView.GetTextAsync();
        return clipboardText;
    }

    return string.Empty;
}
专用异步任务填充()
{
尝试
{
var clipboardText=等待此消息。GetTextFromClipboard();
.....
}
捕获(例外情况除外)
{
this.HandleException(“读取剪贴板时出错:”,ex);
}
}
私有异步任务GetTextFromClipboard()
{
var dataPackageView=Clipboard.GetContent();//此处发生异常!!!
if(dataPackageView.Contains(StandardDataFormats.Text))
{
var clipboardText=await dataPackageView.GetTextAsync();
返回剪贴簿文本;
}
返回字符串。空;
}

这里出了什么问题?为什么只在快照视图模式下发生?

我找到了问题的原因。在snapview模式下,将某些内容复制到剪贴板时,应用程序失去了焦点。也就是说,Clipboard.GetContent()只能在前台工作。在调度程序计时器中读取剪贴板数据之前,如何在前台处理应用程序?您不能。不允许应用程序窃取前台。这应该是一种方法。我只需要在快照视图模式下执行此操作。计时器正在读取剪贴板数据。在读取剪贴板数据之前,可能我可以将应用程序放在前台的代码中。可能是setfocus之类的。当你说“应该有办法做到这一点”时,请更具体地说明你的意思。你是说“有办法做到这一点,但我找不到”吗?或者您是说“应该重新设计窗口,以便可以窃取焦点”?请不要使用计时器轮询来监视剪贴板。这一战略注定要失败。使用适当的剪贴板通知API。Windows已经拥有它20多年了。