0

覆蓋我不知道是否有可能瞭解哪些代碼段是從源代碼只是依賴於Windows Phone的開發靜態分析UI執行。如何理解「UI線程」從源代碼在WP

我嘗試實施靜態分析發現的地方在調度。(開始)調用不必要地使用。

這些是UI線程絕對執行地方:

  • 事件處理程序,其被「RoutedEventArgs」作爲參數UI元素
  • 方法的定義在上述的方法調用的
  • 構造(裝置那些傳遞性地查看這些事件處理方法和UI構造函數的調用圖)

是否有其他地方或有什麼問題abo以上列表?

回答

0

每天通過使用分派或右的SynchronizationContext將執行UI線程調用的方法。這使得詳盡的靜態分析成爲不可能。例如,WebClient類的回調在UI線程上執行。你如何預測那些角落案件?

儘管一個快速提示,非常有用的是你有一個方法可以從UI或非UI線程調用。通過調用方法Dispatcher.CheckAccess()(這種方法不受Visual Studio中的智能感知顯示,所以很難發現),你就可以知道,如果你需要調用調度與否:

if (Dispatcher.CheckAccess()) 
{ 
    // In the UI thread 
    SomeMethod(); 
} 
else 
{ 
    // Not in the UI thread 
    Dispatcher.BeginInvoke(SomeMethod); 
} 

從那裏,你可以編寫一個包裝:

public void CallDispatcherIfNeeded(Action method) // You might want a shorter name 
{ 
    if (Dispatcher.CheckAccess()) 
    { 
     // In the UI thread 
     method(); 
    } 
    else 
    { 
     // Not in the UI thread 
     Dispatcher.BeginInvoke(method); 
    } 
} 

然後你只需要你是否是在UI線程或不調用它,而不用擔心:

CallDispatcherIfNeeded(SomeMethod); 

這就是說,如果你的代碼正確書寫,這是非常罕見的需要這種伎倆。

0

我想看看在實際需要Dispatcher.BeginInvoke的,而不是其他方式。

這幾乎是不需要的,除了處理可能從後臺線程開始的異步完成事件,因此如果要使用UI執行某些操作,則需要將其封送到UI線程。

換句話說,除非你需要做的與從後臺線程的UI的東西,你不需要它。

格雷格