У меня есть 2 класса A и B, где они принадлежат одному и тому же пространству имен, но находятся в отдельных файлах, а именно a.cs и b.cs, где класс B по сути является помощником, заключающим в себе вызов веб-службы следующим образом:
public class A
{
public A() // constructor
{
protected static B b = new B();
}
private void processResult1(string result)
{
// come here when result is successful
}
private void processResult2(string result)
{
// come here when result is failed
}
static void main()
{
b.DoJobHelper(...);
}
}
public class B
{
private com.nowhere.somewebservice ws;
public B()
{
this.ws = new com.nowhere.somewebservice();
ws.JobCompleted += new JobCompletedEventHandler(OnCompleted);
}
void OnCompleted(object sender, JobCompletedEventArgs e)
{
string s = e.Result;
Guid taskID = (Guid)e.UserState;
switch (s)
{
case "Success":
// Call processResult1();
break;
case "Failed":
// Call processResult2();
break;
default: break;
}
}
public void DoJobHelper()
{
Object userState = Guid.NewGuid();
ws.DoJob(..., userState);
}
}
(1) Я видел тексты в сети об использовании делегатов для обратных вызовов, но не смог применить это в моем случае. Все, что я хочу сделать, это вызвать соответствующий processResult()
метод при OnCompleted()
событии, но не знаю, как и где объявить делегата:
public delegate void CallBack(string s);
(2) Есть объект отправителя, переданный в OnCompleted()
, но никогда не использовавшийся, я что-то там пропустил? Или как я могу использовать sender
?
Любая помощь приветствуется.