В Java возможно переименование потоков.В .NET это не так.Это связано с тем, что имя является свойством однократной записи в классе Thread:
public string Name
{
get
{
return this.m_Name;
}
[HostProtection(SecurityAction.LinkDemand, ExternalThreading=true)]
set
{
lock (this)
{
if (this.m_Name != null)
{
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WriteOnce"));
}
this.m_Name = value;
InformThreadNameChangeEx(this, this.m_Name);
}
}
}
Учитывая тот факт, что Java допускает переименование потоков, и большинство используемых базовых структур потоков предоставляются ОС на обеих платформахЯ склонен думать, что на самом деле я мог бы переименовать поток в C #, если бы я избегал определенного набора функций, которые а) меня не волнуют или б) вообще не используют.
Есть ли у вас идеи, почему переименование потока является операцией однократной записи?Любая идея, если изменение имени что-то нарушает?
Я пробовал тест, в котором я переименовал поток следующим образом:
var t1 = new Thread(TestMethod);
t1.Name = "abc";
t1.Start();
t1.GetType().GetField("m_Name", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(t1, "def");
t1.GetType().GetMethod("InformThreadNameChangeEx", BindingFlags.NonPublic | BindingFlags.Static).Invoke(t1, new object[] { t1, t1.Name});
В результате имя действительно изменилось, и это отражаетсяна другой код, который использует этот поток.Основанием для этого является то, что мне нужно регистрировать то, что делают потоки, а библиотека ведения журналов, которую я использую (log4net), использует Thread.Name, чтобы указать, какой поток выполняет какое действие.Заранее спасибо.
РЕДАКТИРОВАТЬ: Пожалуйста, прекратите предлагать очевидные вещи!Я знаю, как назвать поток при запуске, если я спрашиваю, как его переименовать.
Причина, по которой мне нужно это сделать, заключается в том, что поток будет использоваться повторно, и он может использоватьсядругой компонент, и я хочу указать это, если и когда будет происходить регистрация, чтобы иметь конкретное имя потока, а не общее число.