События, запущенные в фоновом режиме, игнорируются - PullRequest
0 голосов
/ 13 марта 2012

Я запускаю приложение форм C #, которое запускает поток для получения некоторых данных. В этом потоке есть некоторые события внутри , то есть: события запускаются в потоке и должны быть захвачены тем же потоком. Тем не менее, события потока, похоже, не запускаются. Любые подсказки?

private void btnPlay_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(kinect.onlineRun);
        thread.IsBackground = true;
        thread.Start();
    }

внутри потока:

void PointCreated(object sender, IdEventArgs e) // a certain event that should fire and it doesn't
        {
            Console.WriteLine("Event Fired!");            
        }



public void onlinerun()
{
    Console.WriteLine("run started"); // this is printed on console
    while (true)
    {
      do_some_work();
      //this work could result in the PointCreated event firing
    }
}

1 Ответ

0 голосов
/ 14 марта 2012

Попробуйте что-то вроде этого:

Предполагая, что ваш вызывающий класс называется Controller, а ваш делегат называется ControlEventHandler ...

private void PointCreated(object sender, IdEventArgs e)
{
    // Ensure the event was received in the calling thread
    if (this.InvokeRequired)
    {
        if (e != null)
        {
            // We aren't in the correct thread so pass on the event
            this.BeginInvoke(new Controller.ControllerEventHandler(this.PointCreated), new object[] { sender, e });
        }
    }
    else
    {
        lock (this)
        {
            Console.WriteLine("Event Fired!");

            // TODO: Do some stuff here
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...