Подтвердить что ты не робот

Именование BackgroundWorker

Я хотел бы иметь возможность указать BackgroundWorker, чтобы упростить его отладку. Возможно ли это?

4b9b3361

Ответ 1

Мне нужно попробовать, но вы не можете просто установить Name потока в методе DoWork(), выполняемом BackgroundWorker?

UPDATE: я просто попробовал следующую строку кода как первый оператор моего метода BackgroundWorkers DoWork(), и он работает:

if (Thread.CurrentThread.Name == null)
    Thread.CurrentThread.Name = "MyBackgroundWorkerThread";

ОБНОВЛЕНИЕ: Как верно сказал Джонатан Аллен, имя потока записывается один раз, поэтому я добавил нулевую проверку перед установкой имени. Попытка записать имя во второй раз приведет к исключению InvalidOperationException. Как писал Марк Гравелл, он также может сделать отладку сложнее, как только объединенные фоновые потоки будут повторно использоваться для другой работы, поэтому при необходимости назовите потоки.

Ответ 2

public class NamedBackgroundWorker : BackgroundWorker
{
    public NamedBackgroundWorker(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }

    protected override void OnDoWork(DoWorkEventArgs e)
    {
        if (Thread.CurrentThread.Name == null) // Can only set it once
            Thread.CurrentThread.Name = Name;

        base.OnDoWork(e);
    }
}

Ответ 3

Вы можете расширить фоновый рабочий элемент через пользовательский класс:

`

public class NamedBackgroundWorker : BackgroundWorker
{

     public string Name;

     public BackgroundWorker(string Name)
     {
       this.Name = Name;
     }
}

` Теперь просто создайте объект из этого, и вы можете назвать его и использовать его в качестве рабочего фона.

Ответ 4

Вы можете назвать свои потоки в "потоках" -window при отладке в Visual Studio.