覆蓋我不知道是否有可能瞭解哪些代碼段是從源代碼只是依賴於Windows Phone的開發靜態分析UI執行。如何理解「UI線程」從源代碼在WP
我嘗試實施靜態分析發現的地方在調度。(開始)調用不必要地使用。
這些是UI線程絕對執行地方:
- 事件處理程序,其被「RoutedEventArgs」作爲參數UI元素
- 方法的定義在上述的方法調用的
- 構造(裝置那些傳遞性地查看這些事件處理方法和UI構造函數的調用圖)
是否有其他地方或有什麼問題abo以上列表?
覆蓋我不知道是否有可能瞭解哪些代碼段是從源代碼只是依賴於Windows Phone的開發靜態分析UI執行。如何理解「UI線程」從源代碼在WP
我嘗試實施靜態分析發現的地方在調度。(開始)調用不必要地使用。
這些是UI線程絕對執行地方:
是否有其他地方或有什麼問題abo以上列表?
每天通過使用分派或右的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);
這就是說,如果你的代碼正確書寫,這是非常罕見的需要這種伎倆。
我想看看在實際需要Dispatcher.BeginInvoke的,而不是其他方式。
這幾乎是不需要的,除了處理可能從後臺線程開始的異步完成事件,因此如果要使用UI執行某些操作,則需要將其封送到UI線程。
換句話說,除非你需要做的與從後臺線程的UI的東西,你不需要它。
格雷格