2010-09-07 188 views
27

是否有可能在Windows Phone 7上以編程方式關閉Silverlight應用程序?Windows Phone 7關閉應用程序

+1

請仔細閱讀本:HTTP://博客.jerrynixon.com/2011/11/mango-sample-exit-application.html – 2012-02-20 19:39:33

+0

此問題已解決,下面的帖子顯示了代碼以安全地退出silverlight應用程序。 – 2012-04-09 15:20:12

+0

爲什麼不讓用戶在第一頁上按回來,以便應用程序可以自然退出? – onmyway133 2012-11-09 10:50:43

回答

8

Silverlight的簡短答案是否。
您不應提供關閉應用程序的方法。關閉應用程序應該是用戶的選擇,並通過使用後退按鈕實現適當的次數。這也是市場需求。

也就是說,如果有未處理的異常,silverlight應用程序將關閉。我看到一些人嘗試通過拋出錯誤處理中顯式忽略的自定義錯誤來創建程序化關閉。這可以工作,但仍然存在市場問題。

XNA應用程序可以明確地呼叫Exit()

+0

馬特在這裏是正確的 - 從Silverlight你不能,但你可以從XNA。以下鏈接Peter的博客提供了更多信息。請注意,拋出自定義錯誤違反了市場策略,並會導致應用被拒絕接受市場。此外,不允許從Silverlight應用程序調用XNA Exit方法。 – 2010-09-07 16:21:49

14

如果您編寫XNA遊戲,您將有權訪問明確的Exit()方法。如果您正在編寫傳統的Silverlight項目,那麼無法以編程方式關閉您的應用程序。另請參閱Peter Torr's Blog entry on Exiting Silverlight Apps in Windows Phone 7。在那裏他還提到了拋出一個未處理的異常的選擇,這是一種可怕的編程風格。

您可以嘗試的選項是使用WP7導航服務以編程方式導航迴應用程序。不知道這是否會工作。爲什麼你需要退出

+0

僅供參考,當您處於應用程序的第一頁時,CanGoBack爲false。試圖回頭再拋出一個異常,最終達到你的目標,儘管不是很優雅。 – 2011-10-02 13:02:19

+0

有一種方法可以在Silverlight應用程序中以編程方式關閉您的應用程序,請參閱以下文章 – 2012-04-09 15:19:25

6

這裏有一些很好的信息。除此之外..

該平臺完全能夠管理應用程序的關閉。越多的應用程序不提供退出,更快的用戶將習慣於不考慮應用程序管理,並讓平臺管理它。容易 - - 使用開始,背部等

如果用戶希望從當前應用程序的去做些別的事情很快

用戶將只是導航他們的設備他們只投中開始。

.Exit(),雖然可用於xna,但實際上不再需要。在CTP期間有一個證書要求,遊戲必須提供退出按鈕。現在這消失了。

非遊戲應用程序從來沒有需要實現這一點。

這個話題的討論越多(它在這個區塊的運行真的很好),對我來說指標越多,就不需要編碼出口。

更新:對於未處理的異常的那些思想爲故意關閉一個應用程序或讓關閉該應用程序的一個合適的方式因欠佳的經營狀況,我會建議您查看關於這個答案的應用認證要求的意見。 Is there a way to programmatically quit my App? (Windows Phone 7)

11

您可以隨時在您的着陸頁上使用您的應用程序返回按鈕的點擊這樣的代碼調用退出:

if (NavigationService.CanGoBack) 
{ 
    while (NavigationService.RemoveBackEntry() != null) 
    { 
     NavigationService.RemoveBackEntry(); 
    } 
} 

這將從堆棧中刪除回條目,你會按下一個後退按鈕它將無任何例外地關閉應用程序。

+0

謝謝。在我的應用程序頁面中,像這樣1 - > 2 - > 3,但第二頁是一個嚮導,可以讓你進入第三頁,在這裏我攔截後退按鈕並手動導航到第1頁,跳過第2頁。但是由於雙向導航服務在手動頁面更改後工作我無法退出應用程序返回到操作系統。 – LukeP 2012-01-02 19:29:51

+0

好,我認爲你可以回到操作系統。只需在應用程序頁面1的負載中使用此代碼,並在u從第3頁手動到第1頁時使用此代碼。它將刪除所有後退條目存在,並點擊後退按鈕它會出來。我也在我的應用中完成了這項工作。你只需要在背面按鍵上出來就是空的導航服務棧。我希望它可以幫助你+1 – 2012-02-08 05:18:43

+1

+1 - 不知道爲什麼更多的人不使用這種方法。完美的作品,並沒有拋出異常... – 2012-02-16 23:36:56

0

我的2個便士,原因退出

1)沒有連接INTERENT第一次運行它,它需要在Web服務中創建一個帳戶某處運行。

2)您需要爲用戶強制升級,再次綁定到Web服務時,您可能會發現應用程序中存在錯誤,或者Web服務發生更改,這意味着用戶需要強制升級這一點,你會想通知用戶,他們必須升級,然後退出應用程序。

目前在我的應用程序,我被迫採取用戶,說「他們」必須退出一個形式,如果他們點擊返回他們被迫再次回到這個頁面。不大好。

2

添加到Microsoft.Xna.Framework.Game的引用,然後調用:

new Microsoft.Xna.Framework.Game().Exit(); 
+0

爲什麼你想添加XNA引用?當它是一個銀光應用程序 – 2012-04-09 15:20:53

+0

添加引用不會影響應用程序,並且如果您需要徹底退出應用程序,則有一個單線程選項 – 2012-05-21 13:10:57

+0

將此API用於silverlight應用程序會使該應用程序在市場上被拒絕isn '它呢? – Apoorva 2012-07-03 07:54:27

1
private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    while (NavigationService.CanGoBack) 
     NavigationService.RemoveBackEntry(); 
} 

,對我的罰款工作。

0

在Silverlight中,我拋出一個未經處理的異常時,我不得不退出應用程序。我知道這不是處理這個問題的優雅方法,但它仍然是最方便和最簡單的解決方案。

我知道,根據指導原則,代碼中不應該有任何未處理的異常,但我會寫入爲什麼我要在提交時明確拋出異常請求文檔中未處理的異常。

到目前爲止這種方法一直工作,從來沒有我。

3

這裏是另一種解決方案。 如果您有即會顯示錯誤給最終用戶一個錯誤頁面,您可以使用

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     base.OnBackKeyPress(e); 
     e.Cancel = true; 
    } 

而且你可以指導用戶按啓動按鈕退出應用程序。

0
做到這一點

最簡單方法是添加一個引用Microsoft.Xna.Framework.Game,再加入 使用Microsoft.Xna.Framework.GamerServices;命名空間前的。然後,我們有我們的Example.xaml一個按鈕Click="quit_button"。輸出Example.xaml。CS我們把這個代碼我們的頁面類中:

private void quit_Click(object sender, EventArgs e) 
     { 
      new Microsoft.Xna.Framework.Game().Exit(); 
      //This will close our app 
     } 
0
var buttonInfo = MessageBox.Show("Are you sure you want to exit?", "Exit", MessageBoxButton.OKCancel); 
     if (buttonInfo == MessageBoxResult.OK) 
     { 
      if (NavigationService.CanGoBack) 
      { 
       while (NavigationService.RemoveBackEntry() != null) 
       { 
         // 
       } 
      } 
      e.Cancel = false; 
     } 
     else 
     { 
      //Stop page from navigating 
      e.Cancel = true; 
     } 
+0

這不會通過認證程序,因爲:「應用程序不允許自行退出。」這聽起來很愚蠢,但這是微軟的政策。 – Olter 2013-10-22 11:17:20

+0

導航到您的解決方案資源管理器中的App.xaml.cs並將靜態方法添加到應用程序類 'public static void Exit() {0} {0} {0} {0} App.Current.Terminate(); }' }這樣你可以從你的應用程序的任意位置調用它,如下所示 'App.Exit();' – 2013-12-15 04:21:10

1

您可以使用此語句

Application.Current.Terminate(); 
+1

問題是關於windows-phone-7,而不是windows-phone-8。 – Olter 2013-10-23 07:37:59

0

導航關閉應用App.xaml.cs在解決方案資源管理器和 添加靜態方法到App

public static void Exit() 
{ 
     App.Current.Terminate(); 
} 

這樣就可以從你的應用程序的任何地方調用它,如下

App.Exit(); 
1

這完美地工作Windows Phone上的7

System.Reflection.Assembly asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"); 
      asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"); 
      Type type = asmb.GetType("Microsoft.Xna.Framework.Game"); 
      object obj = type.GetConstructor(new Type[] { }).Invoke(new object[] { }); 
      type.GetMethod("Exit").Invoke(obj, new object[] { }); 

鏈接 - source