Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> event в Windows Forms, Вызов контролов формы в событии 
:(
    Опции темы
Karrde
Дата 27.2.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Доброго времени суток. на c# написал свою длл, в которой есть ивент

Код

 public delegate void TimeEventHandler(object sender, PlayerTickEventArgs e);
public class CPlayShort
    {
        ...
        public event TimeEventHandler PlayTick;
        public void timerTick(object e)
        {
            PlayerTickEventArgs arg = new PlayerTickEventArgs((Int32)(_playerEx.GetPosition(TimeFormat.Milliseconds) / 1000));
            if (null != PlayTick)
            {
                PlayTick(new object(), arg);
            }
        }
    }


И в форме объявил объект класса, добавил подписку на ивент. Но функция выполняется в другом потоке, и следовательно, в ней нельзя вызывать контролы формы. Можно, конечно, добавить ещё один делегат, но, по идее, можно обойтись без него. Как нужно было делать этот ивент, чтобы спокойно в функции обработки ивента можно было вызывать контролы? Заранее спасибо
PM MAIL   Вверх
-Mikle-
Дата 27.2.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Если ваша библиотека с классом CPlayShort имеет 100% отношение к формам и контролам (к представлению одним словом) внутри себя, то просто используйте таймер из пространства имен System.Windows.Forms, он генерит событие в основном потоке. Если ваша библиотека не имеет ничего общего с представлением, то просто неприлично будет задумываться об этом на стороне этой библиотеки. В последнем случае, нет ничего постыдного в том, чтобы в обработчике события (на стороне формы) расположить код по вызову Control.Invoke(...) (только вот не зачем еще один делегат вам, как вы сказали).


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Karrde
Дата 28.2.2011, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Хм. т.е. это будет что-то типа
Код

  public delegate void DoPlayerTick(int current);
  public DoPlayerTick playerTickDelegate;
  private void Form1_Load(object sender, EventArgs e)
  {
...
       playerTickDelegate = new DoPlayerTick(TickChanged);
  }

//Функция, вызывающаяся при генерации события
  private void pPlayback_Tick(object sender, PlayerTickEventArgs e)
        {
            Form1.Invoke(Form1.playerTickDelegate, e.CurrentTime);
        }



Ну и функцию TickChanged объявляем. 
Но на инвоуке требует нестатический метод или поле. Чего то тут недопонимаю
PM MAIL   Вверх
Karrde
Дата 28.2.2011, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



А, понял)) не Form1(это же класс))), а this. Спасибо большое))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.