2013-02-13 64 views
1

我试图激活从自己的分成合约我的应用程序(请 - 不要这个是否是好从一个角度证明一点上做评论...应用程序的激活是通过共享合同用户界面上的按钮完成的,除非用户主动提供,否则不会发生。我在这里询问技术问题,而不是关于用户体验方面 - 谢谢!!)如何激活通过协议激活从每股魅力

我有它的设置是这样的:

一切似乎工作正常 - 激活事件/重写触发,应用程序实际上激活并显示出来,但后来,经过我OnActivated代码完成,下面的错误显示出来:

The operation cannot be completed because the window is being closed. (Exception from HRESULT: 0x802A0201) 

我能做些什么,使这项工作?任何想法?

这哪里是出现这个(没有用户代码,没有得到由UnhandledException事件处理)调用堆栈...

mscorlib.dll中!System.Threading.Tasks.AwaitTaskContinuation.ThrowAsyncIfNecessary.AnonymousMethod__1(对象s)+ 0x33字节 mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state)+ 0x3e bytes mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback回调,对象状态,布尔preserveSyncCtx)+ 0xa7字节 mscorlib.dll中!System.Threading.ExecutionContext.Run(系统。 Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state,bool preserveSyncCtx)+ 0x16 bytes mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+ 0x60 bytes mscorlib.dll!System .Threading.ThreadPoolWorkQueue.Dispatch()+ 0x149字节 mscorlib.dll中!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()+ 0x5的字节 [原产于托管过渡]

回答

0

你不能。

不幸的是,你正试图混合的东西并不意味着要混合。如果你创建一个自定义协议激活了您的应用程序,然后调用包含该协议将启动您的应用程序的URI。共享魅力只会激活具有共享目标合约的应用程序。没有例外。

这里有协议激活多一点信息。您可能会发现它有用:http://blog.jerrynixon.com/2012/10/walkthrough-using-windows-8-custom.html

2

的解决方法是相当简单的,如果有点老派(尽管完全的WinRT支持)...

步骤0:定义你要在你的应用程序使用命名事件:

public static EventWaitHandle GetActivationEvent() 
{ 
    EventWaitHandle sync = new EventWaitHandle(false, EventResetMode.ManualReset, Constants.ActivationEventName); 
    return sync; 
} 

步骤1:在OnActivate()重写,得到该事件,并将其设置:

using (var sync = Utils.GetActivationEvent()) 
{ 
    sync.Set(); 
} 

步骤2:从共享目标,激活自己在第以下方式:

using (EventWaitHandle sync = Utils.GetActivationEvent()) 
{ 
    await Launcher.LaunchUriAsync(new Uri(String.Format("my-protocol:///?id={0}&operation={1}", id, op))); 
    await Task.Run(() => sync.WaitOne(5000)); 
    this.m_shareOperation.ReportCompleted(); 
} 

就是这样。这将确保Windows不会对应用程序关闭和同时打开感到困惑和抱怨。

+0

这实际上工作,只是在Windows 8.1上有同样的问题,并解决了这个问题。谢谢!! – DVD 2013-12-13 04:03:10