2013-02-13 104 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