Кратко без регулярных выражений, но HTTPResponseCode => httpresponse_code:
def from_camel(name):
"""
ThisIsCamelCase ==> this_is_camel_case
"""
name = name.replace("_", "")
_cas = lambda _x : [_i.isupper() for _i in _x]
seq = zip(_cas(name[1:-1]), _cas(name[2:]))
ss = [_x + 1 for _x, (_i, _j) in enumerate(seq) if (_i, _j) == (False, True)]
return "".join([ch + "_" if _x in ss else ch for _x, ch in numerate(name.lower())])
Я бы попробовал, но разве вы не можете просто установить Имя потока в методе DoWork(), выполняемом BackgroundWorker?
UPDATE: Я только что попробовал следующую строку кода в качестве первого оператора метода BackgroundWorkers DoWork(), и она работает:
if (Thread.CurrentThread.Name == null)
Thread.CurrentThread.Name = "MyBackgroundWorkerThread";
UPDATE: Как правильно сказал Джонатан Аллен, имя потока записывается один раз, поэтому я добавил проверку нуля перед установкой имени. Попытка записать имя во второй раз приведет к InvalidOperationException. Как написал Marc Gravell, это также может усложнить отладку отладки, так как пул фоновых потоков повторно используется для другой работы, поэтому называйте потоки только при необходимости...
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);
}
}
Вы можете называть свои потоки в окне «Threads» при отладке в Visual Studio.