![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Вобщем пишу программу, которая проигрывает поток Shoutcast'а или Icecast'а
Юзаю библиотеку BASS для .NET там есть тутор... вобщем посмотрел... там все в одном файле разобрался немного, написал аналогичную прогу Потом захотелось вынести все что относится к BASS'у в отдельный класс переписал, запустил, получил три ошибки в тех местах где были эти Invoke, а именно вот тут
ошибки что-то вроде "does not contain a definition for 'Invoke'" помогите разобраться в чем проблема! |
|||
|
||||
$tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
Мне кажется что этот код принадлежал классу, который наследовался от System.Windows.Forms.Control. Тебе классы надо целиком было переносить ИМХО.
|
|||
|
||||
Lеstat |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
в примере вот так написано [code=csharp]
public class NetRadio : System.Windows.Forms.Form Целиком пример воткнуть не могу... даже когда 1/3 вставляю пишет что сообщение слишком большое! Я хочу сделать по этому примеру класс, создав объект которого можно будет писать что-то вроде
накатал пока, а точнее накопировал =) вот такой класс тут правда есть еще ошибки, но думаю смогу их решить, а вот про инвоки мало что знаю
а он с этими инвоками не работает =( Это сообщение отредактировал(а) Lеstat - 3.9.2006, 15:50 |
||||
|
|||||
$tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
Короче, как я понял, в примере на форму выводилась вся инфа о текущей мелодии. По типу плеера. Все раньше было в классе, который являлся формой и это потоковое радио представлял. Когда ты перенес код примера в отдельный класс естественно все перестало работать. Самым простым выходом будет либо при создании класса указывать форму, на которую будет идти инфа (в этом случае this.invoke меняется на form.invoke или что-то аналогичное), либо использовать другой метод получения инфы (например создать класс с полями Title, Artist и т.п.).
А вызовы делегатов (с помощью метода invoke) просто отправляют некоторую инфу на форму. Тебе надо просто разобраться с кодом примера и сделать именно отдельный класс. Будут какие вопросы - задавай здесь или в асе. |
|||
|
||||
Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
я так понимаю в этом классе нужно событие делать?
invoke вобще для чего нужно? что оно делает? его как-нибудь можно заменить в просто классе, не в форме |
|||
|
||||
$tatic |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
фактически invoke вызывает функцию, передаваемую делегатом, и при желании разработчика передает ей параметры.
В общем читай MSDN. Например код
создает делегат для функции UpdateMessageDisplay и вызывает ее. А поскольку ей требуется параметр, то он (txt) передается в массиве объектов. В результате получается вызов
но выполняется он в том потоке, который владеет низкоуровневым хендлом формы. Это сообщение отредактировал(а) $tatic - 3.9.2006, 19:29 |
||||
|
|||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Form.Invoke вызывает метод, передынный ему в качестве параметра (new UpdateMessageDelegate(UpdateMessageDisplay)), в контексте WinForms потока приложения, с заданными параметрами (new object[] { txt }).
Код который ты накопировал ориентирован на работу в несколько потоков. На сколько я понял из обрезков, в одном потоке осуществляется скачивание, во втором проигрывание, в третьем, потоке WinForms, управление и индикация. Пока с потокам не разберёшся работать у тебя ничего не будет. Короче, учите мат. часть. Будут вопросы - всегда рады. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Lеstat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Я пока сделал так...
взял выкинул все кроме проигрывания... Там все эти умные инвоки, насколько я понял, что-то вроде события чтоли создают... для того чтобы обновлять теги артист, трек и тд, когда они меняются вот класс, который работает
|
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Читай, что выше Pegas пишет:
-------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |