Я хотел бы иметь возможность указать BackgroundWorker, чтобы упростить его отладку. Возможно ли это?
Именование BackgroundWorker
Ответ 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.