Событие работает в другом потоке? (.Net Compact Framework) - PullRequest
1 голос
/ 01 декабря 2009

Я разрабатываю Windows Mobile 5.0 или выше с .Net Compact Framework 2.0 SP2 и C # .

когда я пытаюсь получить доступ к ширине элемента управления в методе, который обрабатывает событие, он выдает мне следующее исключение:

Control.Invoke должен использоваться для взаимодействия с элементами управления, созданными в отдельном потоке.

Этот метод работает в другом потоке?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 01 декабря 2009

Да, элементы управления не могут быть доступны тем, кто их не создал. Ну, если быть точным, они могут, если вы действительно хотите, но вы рискуете заблокировать приложение "случайно" из-за тупика.

Чтобы обойти эту проблему, используйте методы Invoke () или BeginInvoke (), чтобы установить обратный вызов для «потока пользовательского интерфейса».

, например

private void HandleSomeEvent(object sender, EventArgs e)
{
    if(textBox1.InvokeRequired)
    {
        textBox1.BeginInvoke(new EventHandler(HandleSomeEvent), new object[]{sender, e});
    }
    else
    {
        textBox1.Text = "WIN!";
    }
}
4 голосов
/ 01 декабря 2009

Событие запускается в потоке, который его вызвал. Так что, если событие было запущено в потоке, отличном от того, который создал элемент управления, оно запускается в другом потоке, да.

...