Silverlight: 超簡單的非同步方法:小朱的技術空間:Xuite日誌
  • 小朱
  • 一個畢業於國立屏東商技資管系,已有數年軟體發展經驗的毛頭小子,長期在網路各大論壇上游走,具有微軟MVP資格,並持有多張微軟認證,自詡為軟體技術玩家,以善用技術為本,以解決問題為目標,對企業應用系統、資料庫系統、分散式系統以及應用解決方案架構等皆有涉獵與研究,且不定期在 MSDN, RUN PC 與技術論壇中分享心得。



  • 文章分類
  • 搜尋文章
  • 關鍵字
  • 我的發燒文
  • 累積 | 今日
    loading......
  • 日曆
  • 最愛連結
  • 最新文章
  • 最新回應
  • 參觀人氣統計
  • 日誌使用資源






  • 如何使用RSS
    Powered by Xuite
    2008-09-05 10:39 Silverlight: 超簡單的非同步方法
  • ?
  • WPF/Silverlight
  • 好文轉寄
  • 平均分數:0 顆星    投票人數:0
    我要評分:
    標籤 : 


    Silverlight 2.0 的正式版即將在 10 月份的時候進入 RTW (Release to Web,也就是開放下載的意思),我想一定很多很多人都很期待這個版本的到來,不過在這麼長的一段 Beta 試玩期中,有一些在 WPF 上或是以前 Windows Forms 開發的習慣還是沒辦法那麼快的轉過來,像是連到遠端去存取資料這個功能,在 Silverlight 上的方法就和在 WPF 或 Windows Forms 差很多,因為它是以非同步 (asynchronous) 為基礎,在 Silverlight 上做的遠端連接都是非同步。

    所以像是這樣的資料存取:

    OnlineStoreEntities dbcontext = new OnlineStoreEntities(new Uri("http://localhost/OnlineStoreDataServices.svc/"));

    var query = from c in dbcontext.ProductCategories
                select c;

    // synchronous connection.
    foreach (var queryItem in queryItems)
    {
        TextBlock item = new TextBlock();
        item.Tag = queryItem.CategoryID;
        item.Text = queryItem.Name;
        this.lstCategoryList.Items.Add(item);
    }

    就會失敗,而拜 C# 9.0 的 Extension Method 以及 Anonymous Type 等性質的協助下,可以用下列的方式來存取資料:

    OnlineStoreEntities dbcontext = new OnlineStoreEntities(new Uri("http://localhost/OnlineStoreDataServices.svc/"));

    var query = from c in dbcontext.ProductCategories
                select c;

    // For Silverlight's asynchronous data connection.
    AsyncCallback ac = asyncResult =>
    {
        var queryItems = (query as DataServiceQuery ).EndExecute(asyncResult);

        foreach (var queryItem in queryItems)
        {
            TextBlock item = new TextBlock();
            item.Tag = queryItem.CategoryID;
            item.Text = queryItem.Name;
            this.lstCategoryList.Items.Add(item);
        }

        this.labelMessage.Text = "";
    };

    this.labelMessage.Text = "Data Loading....";
    (query as DataServiceQuery ).BeginExecute(ac, null);

    這可比原來要切好幾個函式的方法來簡單多了。



    小朱 / Xuite日誌 / 回應(0) / 引用(1) / 好文轉寄
  • 回應