Я использую фоновый работник, который может иметь n экземпляров. Проблема в том, что метод DoWork (с параметром sender, который является BackgroundWorker) вызывает другой код, который производит обратный вызов - таким образом, у меня нет отправителя.
Как я могу определить BackgroundWorker, под которым работает текущий код?
например:
private void SetupThread()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(DoTheWork);
}
private void DoTheWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
// I know that sender here can be converted, but thats no good for me
MyClass.DoSomething(); // This will produce a callback(event) from MyClass
}
private void MethodCalledFromEventCallback()
{
// Here is where the actual work is being done. I need to determine which
// instance of the Backgroundworker is calling it so that i can use the
// UpdateProgress method
// I cannot do this :-( (BackgroundWorker)System.Threading.Thread.CurrentThread;
}
Я, вероятно, просто что-то пропускаю (если не указан пул потоков :-()
Я уверен, что это легко выполнимо с помощью BackgroundWorker ... есть идеи?
редактировать
Я вызвал некоторую путаницу в своем описании, вот еще несколько фактов :-)
1.) Я уже вызываю bw.RunWorkerAsync ()
2.) Класс, который вызывает событие MethodCalledFromEventCallback, не знает о фоновом потоке
3.) Я не могу (из-за требований к дизайну) включить Backgroundworker в качестве параметра
Спасибо: -)