我不知道下面的代碼購買任何的性能提升:在Silverlight中調用Dispatcher.CheckAccess()是否正確?
if (Deployment.Current.Dispatcher.CheckAccess())
{
DoUIWork();
}
else
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
DoUIWork());
}
足夠的調度智能短路調度到UI線程如果不必要?
我不知道下面的代碼購買任何的性能提升:在Silverlight中調用Dispatcher.CheckAccess()是否正確?
if (Deployment.Current.Dispatcher.CheckAccess())
{
DoUIWork();
}
else
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
DoUIWork());
}
足夠的調度智能短路調度到UI線程如果不必要?
與調查相比,我無法確定調度程序是否在從UI線程派發到自身時執行任何代價昂貴的操作。但是來自UI線程的BeginInvoke可能與直接執行操作的行爲不同,因爲它至少放在隊列中而不是立即調用。如果你之後有代碼,你可以區分這個和刪除條件語句。
肯定值得了解控制流程,足以知道差異是否無關緊要。
如果是像標準的Windows的SynchronizationContext任何東西(很可能是),那麼這兩個選項是不一樣的。 BeginInvoke將基本上排隊當前執行任何現有消息之後由調度器消息泵執行的方法。 在您的示例中,如果要使用Invoke而不是BeginInvoke,則兩個選項是相同的。