C # Cross-Thread Communication
в C # .NET я написал следующий простой фоновый рабочий поток:
public class MyBackgrounder
{
public delegate void dlgAlert();
public dlgAlert Alert;
public event EventHandler eventAlert;
Thread trd;
public void Start()
{
if (trd == null || trd.ThreadState == ThreadState.Aborted)
{
trd = new Thread(new ThreadStart(Do));
}
trd.IsBackground = true;
trd.Priority = ThreadPriority.BelowNormal;
trd.Start();
}
void Do()
{
Thread.Sleep(3000);
Done();
}
void Done()
{
if (Alert != null)
Alert();
if (eventAlert != null)
eventAlert(this, new EventArgs());
Kill();
}
public void Kill()
{
if (trd != null)
trd.Abort();
trd = null;
}
}
static class Program
{
[STAThread]
static void Main()
{
MyBackgrounder bg = new MyBackgrounder();
bg.eventAlert += new EventHandler(bg_eventAlert);
bg.Alert = jobDone;
bg.Start();
}
static void bg_eventAlert(object sender, EventArgs e)
{
// here, current thread's id has been changed
}
static void jobDone()
{
// here, current thread's id has been changed
}
}
Он просто ждет 3 секунды (выполняет свою работу), а затем вызывает указанное событие или вызывает делегата. пока здесь нет проблем, и все работает нормально. Но когда я смотрюThread.CurrentThread.ManagedThreadId& APOS; Я вижу, что это фоновая тема! может быть, это нормально, но как я могу предотвратить такое поведение? если вы проверите & apos;System.Windows.Forms.Timer& APOS; компонент и обрабатывать его & apos;Tick& APOS; событие, вы можете увидеть, что & apos;Thread.CurrentThread.ManagedThreadId& APOS; не был изменен с основного идентификатора потока на что-либо еще.
Что я могу сделать?