Silverlight 2 學習筆記之事件的重複繫結問題

Claire_ljy發表於2020-04-04

 

事件重複繫結是在Silverlight2應用程式開發過程中,開發者容易忽視,時常會為整個Silverlight2應用程式產生重大問題的原因,如果你發現你的Silverlight2應用程式在隨著執行過程時間增長而開始變慢時,你就需要考慮程式碼邏輯是否有事件的重複繫結.

 

繫結一個事件通常是:

void Page_Loaded(object sender, RoutedEventArgs e)
{

cli.GetAllProductsCompleted += new EventHandler<GetAllProductsCompletedEventArgs>(cli_GetAllProductsCompleted);
cli.GetAllProductsAsync();     

}      

然後定義eventHandler:

void cli_GetAllProductsCompleted(object sender, GetAllProductsCompletedEventArgs e)
{


}

如果你把上面的程式碼放在一個XAML使用者控制元件的Loaded事件中,並且在另一個XAML頁面中應用了這個控制元件,那麼上面的繫結事件程式碼,就會在每次觸發Loaded事件時執行,後果是當你觸發上面的事件就會產生N++次的eventHandler,這會使你的事件進入一個排隊狀態,同時你的Silverlight2應用程式也會變得越來越慢.

正確的方法是在使用者控制元件的建構函式裡宣告事件:

pubic Page()
{

InitializeComponent();
cli.GetAllProductsCompleted += new EventHandler<GetAllProductsCompletedEventArgs>(cli_GetAllProductsCompleted);
cli.GetAllProductsAsync();     

}      

這樣控制元件的eventHandler永遠只會繫結一次,即使你重新例項化這個物件,它那的建構函式只會執行一次.

轉載於:https://www.cnblogs.com/slteam/archive/2008/11/21/1338550.html

相關文章