2011-03-31 46 views
1

如果我有一个后台工作,做在某些任务做工作设置RunWorkerCompleted值

String val= getVal("Val"); 
    byte[] b = (byte[])e.Argument; 

    b = getData.FromPlace(val); 

如何传递的vakue B向runworkercompleted方法?

回答

0

您可以使用实例变量。将声明放在DoWork事件定义的上方。

private byte[] b; 
4

你可以使用封闭

void Main() 
{ 

    var bw = new BackgroundWorker(); 

    byte[] b; 

    bw.DoWork += (sender, args) => { 

     b = DoStuff(); 
    }; 
} 

byte[] DoStuff() { 

    String val= getVal("Val"); 
    byte[] b = (byte[])e.Argument; 

    b = getData.FromPlace(val); 

    return b; 
} 

你也可以在参数对象的情况下使用返回结果属性。我认为这样可以提供更大的灵活性。

void Main() 
{ 
    var bw = new BackgroundWorker(); 

    bw.DoWork += (sender, args) => { 

     args.Result = DoStuff(); 
    }; 

    bw.RunWorkerCompleted += (sender, args) => { 
     var result = args.Result as byte[]; 
    }; 

    bw.RunWorkerAsync(); 
} 

byte[] DoStuff() { 
    return new byte[10]; 
}