2015-07-21 160 views
1

當我的後臺線程完成時,它使用匿名lambda語句運行System.Action回調。我想知道如何重寫下面的代碼,以使用Completed函數進行回調/ lambda語句。後臺線程lambda回調

視圖模型:BaseViewModel

public override void Initialize(System.Action onInitializeCallback = null) 
{..... 
    BackgroundEntityWorker.RunWorkerCompleted += (sender, args) => 
    { 
     If (onInitializeCallback != null) 
     { 
      onInitializeCallback(); 
     }  
    }; 
..... 
} 

我想改變它的東西下面

BackgroundEntityWorker.RunWorkerCompleted += BackgroundWorker_Completed => 
{ 
    If (onInitializeCallback != null) 
    { 
     onInitializeCallback(); 
    }  
}; 

BaseViewModel

public virtual void Reload(int? id = null, Action<T> callback = null) 
{  
    Initialize(() => 
    { 
     Localize(); 

     if (id == null) 
     { 
      IndicateLoading(false); 
     } 
     else 
     { 
      Load(id.Value,() => IndicateLoading(false)); 
     } 
    }); 
} 

我得到一個錯誤Argument type 'Lambda expression是不能分配給參數類型System.ComponentModel.RunWorkerCompletedEventHandler

我試圖

BackgroundEntityWorker.RunWorkerCompleted += BackgroundWorker_Completed; 

,但我失去了我的回調,我該如何設置它有BackGroundWorker_Completed和維護我的回調?

+3

你失去了我。你正在試圖發送兩個回調函數......有點。我沒有得到你想要的東西。 – Jonesopolis

+1

您是否嘗試使用命名方法作爲回調?目前我不確定你的意思是「用回調/ lambda語句使用Completed函數」,你的例子對我來說沒有任何意義。 – Chris

+0

只需傳遞您打算使用的代表。將整個lambda替換爲delete的名稱(您的其他回調函數)。 – ryanyuyu

回答

0
BackgroundEntityWorker.RunWorkerCompleted += (sender, args) => 
{ 
    If (onInitializeCallback != null) 
    { 
     onInitializeCallback(); 
    }  
} 

但小心BackgroundEntityWorker空訪問

public override void Initialize(System.Action onInitializeCallback = null) 
{ 
     If (BackgroundEntityWorker.RunWorkerCompleted != null) 
     { 
      BackgroundEntityWorker.RunWorkerCompleted(); 
     }  
} 

您重定向的情況下的兩倍。這對我們來說會更容易,如果你展示如何完成你的事件