2015-07-21 93 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(); 
     }  
} 

您重定向的情况下的两倍。这对我们来说会更容易,如果你展示如何完成你的事件