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; не был изменен с основного идентификатора потока на что-либо еще.

Что я могу сделать?

Ответы на вопрос(5)

Ваш ответ на вопрос