;)
  thinkIT.ru — первый IT-портал города  
 
 
Первый IT-портал города
 
 
Почта:
Пароль:
    Забыли пароль?
  • Звездные войны: Эпизод I 3D
  • Путешествие-2 3D
  • Значит, война
  • Код доступа «Кейптаун»
  • Такие разные близнецы
  • Хроника
  • На Байкал
  • На грани
  • Все любят китов
  • Одержимая
  • Ржевский против Наполеона 3D

Кино в Таганроге

 

Рубрика: blog!

36
Toolbar for ThinkIT ч. 2 или C# достоинства и недостатки.

Toolbar for ThinkIT ч. 2 или C# достоинства и недостатки.


Недавно я в одной из своих тем: http://thinkit.ru/blog/viewblog/1377 упоминал об идеи создания тулбар'а по функционалу сайта, но как оказалось первый блин комом, поэтому пришлось окунуться совсем в другую среду разработки, и об этом погружении читаем ниже.

Автор: Zoomskij | Добавлено: 19 Марта, 2010 | Очень много комментариев | Просмотров: 2091
                                                                                                                           Предисловие
      Сразу хотелось бы выразить признательность Xeon, hws, it 3.0, iNik, да и всем кто откликнулся на прежнюю статью, надеюсь, эта получится ничуть не хуже. Особенно спасибо за критику, без неё я бы так и пыжылся под этим ОпэнЖЛ.

                                                                                                                            История
      Итак некоторое время меня все же отпугивала эта "излишняя" классовость C#, но всё оказалось(даже довольно интересно) не так трудно по этому погружение в "новую" среду было плавным и безболезненным. Что мне сразу напомнил C#, так это VBA, конечно же визуал бэйсик ни в какое сравнение с C# не идёт (хотя для каждой ситуации своё). Или это у них все платформе на основе .NET Framework на одно лицо ;)
      Сам процесс установки Visual Studio 2008 C# занял у меня около 25-30 минут, .NET Framework, медленный как венский вальс.
      Пошел сразу в лобовое наступление, сразу же создал один проект, и там в нем постепенно проверяя работу всяческих форм, реакций на запросы, методом проб и ошибок, собрал вот такое вот окно:

 

      Да конечно, оно пока мало отличается от предыдущей версии, но хотя бы получилось достичь такого же результата в C#, а в нём есть ещё огромное пространство для реализации всех остальных идей. В общем опять некоторый функционал вынесу вниз для наглядности:

                                                                                                         Функционал

• Все те же бинарные часы
• Вот он первый зародыш отлова сообщений из мини-чата, пока нигде не хранятся, и
   нету функции отправлять сообщения
• Далее появилась мысль сделать онлайн_музыку, или же когда всеми любимый DJ BoB
  выпустит новый подкаст, прокручивать и его там.
• Забыл организовать хотя бы поле для поиска по сайту, но это сделается позже, всё равно
  там у половины форм пока с функционалом не лады
• ХЗ с чем синхронизироваться, скорее всего с gismeteo для получения погоды, отведу там
  что ли место, для тех у кого еще нет погодных станций, а в окно стать и посмотреть 
  по-прежнему лень :)
• А далее ряд маленький кнопушек по которым буду всплывать различные функции, аля
  настройки тулбара, поверх всех окон, спрятать вправо, прозрачность...
• Как и ожидалось размер выделяемой памяти увеличился в двое, 19мб оперативной.

                                                                                                           С чего начиналось или послесловие

Сидя на одной из гуманитарных пар, меня одолевала скука, (незадолго до этого разговаривал с некоторыми программистами, которые яро хвалили C#) и тут-то я вспомнил, про сей проджект, почему бы его все же не переписать на C#, если все говорят, что он прост как апельсин. Набросав небольшой чертеж в тетради:

 

я уже был полон решительности и уверенности в том, что в этот раз дело сдвинется с мертвой точки. Так оно впринципи-то и случилось, отложив все дела в сторону, и сосредоточился на созерцание кода. Единственное что, всё же отложу несколько разработку до 25 марта(к олимпиаде подготовится нужно что ли) буду по чуть чуть конечно делать, но всё же...
Чуть позже тогда, если кому интересно, выложу и сам образец программы. Не хочется просто с каждой новой примочкой новую версию релизить, надо бы наверное сначала до ума довести...
Продолжение возможно следует...
                                                                                                                    Дополнено
Вот еще добавил просмотр логотипов тем в блоге, пока тоже работает коряво, скриншот боком, чтобы полоса прокрутки меньше росла, она нам еще пригодится :)



Теги: Toolbar, C#, thinkit.ru, Хочу КПК | Оценка: (6) |

Комментарии:

xeon xeon | 19 Марта 2010 23:32ссылка сюда
Да, прикольно. Ты главное делай. Получишь опыт :)

А ты промежуточные версии тоже выкладывай, интересно будет глянуть :) У меня тоже XMinder не сразу строился http://thinkit.ru/blog/viewblog/1319/ ну и вот: http://xminderapp.blogspot.com/
Жаль, сейчас нет времени сделать все, что хочу.
А после твоей статьи собрался за пару часов накидать жаббер-бота для чтения "прямого эфира". Т.е ты можешь у бота запросить историю. А можешь подписаться и тогда сам бот будет тебе слать сообщения. Но опять же руки не дошли. Сейчас активных проектов больше 6. На just for fun уже нет сил.

По теме программы. Исключения отлавливай. Webrequest вполне может вывалить WebException или IOException.
Кстати, в .net-мире и в C# в частности давать префиксы переменным считается плохим стилем.
Еще хинт. Проверять строку на непустое значение правильно так: if (!String.IsNullOrEmpty(yourString)) ...
Еще: у тебя судя по всему программа будет подвисать при получении сообщения из прямого эфира. Правильно использовать потоковые таймеры (System.Threading.Timer) и делать запрос из потока, а результат уже в основной поток отдавать через Invoke. Если не хочешь заморачиваться с потоковым таймеров - разгрузи основй, делай в нем только wgGetUrl.BeginGetResponse (вообще это рекомендуемая модель работы с потоками для простых случаев Begin<имя операции> есть почти во всех классах, которые работают с медленными ресурсами). В этом случае управление сразу же вернется, а когда данные будут вычитаны из инета, тебя через callback уведомят.
Ну есть еще другой способ в другой поток загнать быстро и просто: ThreadPool.QueueUserWorkItem(<твой делегат>)
Zoomskij Zoomskij | 19 Марта 2010 23:41ссылка сюдаответ на
Да есть некоторые подвисания, так как за одну секунду успевает считать сообщения не меньше 30 раз это точно, ставил там некий флаг, чтобы он после одного прохода превращался в true и на этой секунде больше не попадал в цикл... Но чего-то всё равно коряво работало. Искал прежние функции: Sleep(1000); System("pause"); так печально осознавать, что все, то наработанное тут не фурычит. Хотя тут очевидно, должно иметься чего получше, нужно только поискать. P.S. 3-й день в С#, и то с переодической работой. Поэтому и поставил обновлять чат раз в 15 секунд.
xeon xeon | 20 Марта 2010 08:44ссылка сюдаответ на
А как тебе флаг поможет? Если все останавливается в GetRequest. Тут только асинхронные операции и выбор очень большой
1) Новый поток явно созданный Thread
2) BackgroundWorker
3) BeginGetResponse
4) ThreadPool
5) потоковый таймер

А код, который будет исполняться из потока генерит событие, которое ловит твоя форма в основном потоке и через Invoke делает примерно так
...
_session.TaskStepCompleted += OnTaskStepCompleted;
...


private delegate void TaskStepCompleted(object sender, TaskChangedEventArgs e);
private void OnTaskStepCompleted(object sender, TaskChangedEventArgs e)
{
if (InvokeRequired)
{ // Этот кусок выполняется в фоновом потоке
if (!IsDisposed)
Invoke(new TaskStepCompleted(OnTaskStepCompleted), new[] { sender, e });
}
else
{ // А этот уже в основном.

}
}

Thread.Sleep(1000) - но в твоем случае это тормоза еще на 1 секунду усилит (если ты думал это вставить перед .GetResponse)
Zoomskij Zoomskij | 20 Марта 2010 07:34ссылка сюдаответ на
еще пытался сделать в обход тормозов при получение сообщений, сравнивал только, что полученную строку с уже имеющейся в textBoxе, не помню правда, что за метод вызывал, но мною либимого strcmp сдесь тоже не оказалось... И не могли же они сделать на совместимость с предыдущими версиями!
xeon xeon | 20 Марта 2010 08:47ссылка сюдаответ на
У тебя тормозит получение новой строки, а сравнение - это все до лампочки.
"твоя строка".CompareTo("другая строка")

Совместимость с этим кошмаром вроде printf, strcmp? Они большие молодцы, что этот хлам выкинули.

А если так хочешь это старье пользовать - ну вперед на C++ / CLI. Там и все фишки .net и все ужасы плюсов. Ты в одном методе можешь использовать как конструкции C++, так и .net
Zoomskij Zoomskij | 20 Марта 2010 16:12ссылка сюдаответ на
Эм незнаю как насчет получения новой строки, но когда идет перерисовка, то форма начинает бликовать.
iNik iNik | 20 Марта 2010 09:55ссылка сюда
О! Круто, что разработка тулбара возобновилась.

P.S. Я тут на кануне думал о тулбаре этом и вот какая мысль мне пришла, точнее вопрос.
Вот всем же хочется делать свсем кросс-платформеные решения, но почему-то не все делают. Вот например, программка www.site-auditor.ru.... Она флешевая и из-за этого работает и в MacOS и в Linux и в винде. Расскажите мне, совсем не программисту, чем плох flash?
it_3.0 it_3.0 | 20 Марта 2010 11:56ссылка сюдаответ на
всем.

Он не для этого, у него нет целой кучи возможностей, он не может использовать стандартный для ОС внешний вид, ...

Список долго можно продолжать. Если кратко, то универсальных решений нет, у каждого своя область применения.
Zoomskij Zoomskij | 20 Марта 2010 16:33ссылка сюдаответ на
Но всё же в этом приложение, я тоже не хотел бы использовать стандартный ОС-вид, единственное, что сейчас все же для скорости использую стандартные формы, которые в последующем намерен заменить.
xeon xeon | 20 Марта 2010 13:47ссылка сюдаответ на
Флеш плох тем, что Action Script3 очень слаб. Я вообще не понимаю, как народ столько всего на Air написал. Уж лучше Silverlight в режиме Out of Browser. Это будет работать под маком и в винде на фреймворке от MS.
Вообще после того, как одну работку на Flex сделал, копнул получше Silverlight и понял, что там тоже все это есть и даже больше. Так я и решил больше не связываться с флешем.
xeon xeon | 20 Марта 2010 13:50ссылка сюдаответ на
Хотя тут же меня можно пнуть, что я тут о кросплатформенности C# / .net говорю, а у самого XMinder windows-only.
Ну да, глобальный перехват хоткеев, трей, интерфейс чтобы нативно смотрелся - вот здесь нужно свое решение под каждую ОС. А столько времени нет.
Если программе не нужно сильно затачиваться на интеграцию с ОС - вполне можно и на C# / Silverlight писать :) А если нужно - то придется C# + Win-код, Lin-код, Mac-код. Тот же Gnome Do или Tomboy Notes

Кстати, есть есть время, попробуй реверси на Silverlight запустить у себя на маке. И можно ли будет из браузера вытащить её
http://jetasoft.de/reversi/
iNik iNik | 20 Марта 2010 14:04ссылка сюдаответ на
На маке у меня работает, а вот можно или нет я не знаю... Как это сделать-то? :)
xeon xeon | 20 Марта 2010 16:16ссылка сюдаответ на
step 1
step 2
Zoomskij Zoomskij | 20 Марта 2010 16:22ссылка сюдаответ на
То бишь это даже флэш банеры можно повырезать с браузера, и в отдельное самостоятельное окно? В последующем можно будет запустить данное приложение не выходя в интернет?
xeon xeon | 20 Марта 2010 16:37ссылка сюдаответ на
Это не flash, это Silverlight. Да, можно без инетренета запускать. Единственное, что если есть интеренет и на сайте более новая версия программы выложена, то оно автоматически тебе приедет на локальную машину.
Пример более тяжелого и реального приложения - каталог заказа на giftman.ru

А флеш тоже так можно, можно даже в exe потом завернуть.
Zoomskij Zoomskij | 20 Марта 2010 16:42ссылка сюдаответ на
Не дурно, это оно дамп памяти наверное снимает и по нему уже выстраивает приложение, совсем не дурно...
xeon xeon | 20 Марта 2010 17:59ссылка сюдаответ на
Выкинь это из головы про дамп памяти и все прочее. Кому надо _так_ заморачиваться? К тому же C#/Silverlight приложение не использует ассемблер процессора, на котором исполяется. А в оперативке уже скомпиленное в ассемблер
Это куда более прозаично. Локально скачивается и запускается несколько модифицированная сборка.
iNik iNik | 20 Марта 2010 17:27ссылка сюдаответ на
Да, все без проблем поставилось мне в папку с приложениями и запускается:

xeon xeon | 20 Марта 2010 18:00ссылка сюдаответ на
Прикольно. Оно еще язык подтягивает. У меня интерфейс на английском, т.к винда английская и все региональные параметры тоже.
Zoomskij Zoomskij | 20 Марта 2010 16:07ссылка сюдаответ на
В этот раз я пока о кроссплатформенности, не совсем задумывался, я поставил задачу хотя бы реализовать данный проект, раз уже взялся. Если под виндой получится, почитаю литературу для реализации на других платформах. Возможно делаю двойную работу, но всё же на С# пишется довольно быстро-то почему бы и не воспользоватся этим.
Zoomskij Zoomskij | 21 Марта 2010 14:09ссылка сюдаответ на
А еще флэш сильно нагружает ресурсы процессора, что ведет к торможению всей ОС вцелом. Так что подвергать ОС насилию со стороны небольшой программки не особо-то и хочется (:
iNik iNik | 21 Марта 2010 14:13ссылка сюдаответ на
Ну как сказать..... Я сайт-аудитором пользуюсь постоянно и торможений особых не замечаю. У тулбара, кроме того попроще с функционалом вроде... Вот я и предположил. :)
ArcticFox777 ArcticFox777 | 20 Марта 2010 14:13ссылка сюда
>>.NET frаmеwork, медленный как венский вальс.

чтобы это значило???
Zoomskij Zoomskij | 20 Марта 2010 15:59ссылка сюдаответ на
Да всмысли, что ставился долго, вспоминал афоризмы или устойчивые словосочетания, и тут это нашел, это всё образно. Конечно же все возможности .NET с лихвой покрывают все это!
ArcticFox777 ArcticFox777 | 20 Марта 2010 22:59ссылка сюдаответ на
Если что, то венский вальс это очень быстрый танец. Простой валь да. Медленно танцуется.
Лучше знать такие вещи. А то глаз "режет".
Zoomskij Zoomskij | 20 Марта 2010 23:06ссылка сюдаответ на
зачеркнем, исправим, спасибо!
Zoomskij Zoomskij | 24 Марта 2010 22:01ссылка сюдаответ на
KraiSoft: может ли случиться что нибудь плохое, если установить net frаmеwork?
adabsurdum: конечно может - пока вы будете его ставить, у вас убежит молоко, а кот подавится украденной сосиской (c) bash.org.ru сейчас на главной
Zoomskij Zoomskij | 21 Марта 2010 12:00ссылка сюда
Я бы не стал это называть даже промежуточной версией, так наработки: http://thinkit.ru/images/blog/usersdata/219/toolbarThinkIT.rar + куда-то не туда тыкнете программа аварийно закроется, только по контрол+алт+дел, работать и работать еще надо! А еще с координатами я там чего-то нашаманил, но у меня вроде бы вырисовывает окно в нужном месте.
xeon xeon | 21 Марта 2010 16:23ссылка сюдаответ на
Нет, оно не рисует, так где надо.


Что-то я не понял, как эта формула покажет окно там, где надо?
base.Top = 0;
base.Left += (base.Right * 3) + 0x34;

Кстати, возьми за правило называть все контролы, к которым ты из кода обращаешься, адекватными именами. И их обработчики заодно. Сильно поможешь самому же себе. Всякие label, которые один раз кинул и забыл не обязательно называть правильно.

Если ты хочешь на основном мониторе справа отобразить, то координаты окна должны быть скорее всего такие:
Левый верхний угол:
X: Screen.PrimaryScreen.WorkingArea.Left + Screen.PrimaryScreen.WorkingArea.Width - Width , где Width - ширина твоей формы
Y: Screen.PrimaryScreen.WorkingArea.Top
Zoomskij Zoomskij | 21 Марта 2010 16:45ссылка сюдаответ на
Я пытался сделать так:
this.Top = 0;
this.Left += this.Right-200; // 200 - width toolbar's

но оно все равно рисовало в центре, путем нехитрого перебора, вырисовал этой формулой окно у себя в правом верхнем углу. Но так и думал что у остального айти-сообщества, это не прохляет. Угу спасибо, сейчас опробую.

P.S. Добавил еще форматирование сообщений в чате, и наладил прослушивание звуковых файлов пока только локальных... Работаю... Вот чуть переработанная версия вкл. всё вышеперечисленное: http://thinkit.ru/images/blog/usersdata/219/toolbarThinkIT.rar
xeon xeon | 21 Марта 2010 17:32ссылка сюдаответ на
Эх... Что же ты за IT-шник, раз Explorer-ом пользуешься. И в архивы ярлыки добавляешь вместо файлов.
А если уж пользуешься г... то таскай хотя бы правой кнопкой и выбирай "copy" :)
Zoomskij Zoomskij | 21 Марта 2010 17:33ссылка сюдаответ на
Нее, передал проверяй. Просто в буфере бэкап файла хранился, думал и так прохляет, перятянул, потом спалил, пришлось опять пути переписывать, щас работает %) думал успею переделать пока никто не скачал, ан нет :(
так-то я бы по контрол+ц->контрол+в
xeon xeon | 21 Марта 2010 17:54ссылка сюдаответ на
Ладно, последний совет, поднадоело уже.
Если есть возможность несколько раз нажать кнопку, чтобы приложение вылетело, то можно в первой строчке обработчика дизаблить кнопку, курсор делать занятым. А в блоке finally снова включать кнопку.
Zoomskij Zoomskij | 23 Марта 2010 16:41ссылка сюда
Я понял чего так не хватало ему(тулбару), так это сворачивание, либо что бы он не был по верх всех окон.

• Организовано сворачивание в правую стенку монитора, будет торчать батон в 2pix - для восстановления. Так что может работать постоянно!
• Сделал Онлайн музыку, пока набросок, но хотелось бы услышать, стиль, направление? или же каждый будет пользоваться своим плеером? :)
Кстати никто не против если я у вас своей музыкой немного ресурсов(памяти) отберу. Располагаю тут её для синхронизации, упадёт Thinkit.ru ->
упадёт и музыка :)
• Ииху добавлен favicon
• Пока нестабильно работающий функционал "залочил" P.S. Кроме кнопки test не помню на что она ссылается, но забыл про неё...
P.S. Кода закомментированного уже раза в полтора больше чем обычного, начинаю что-то писать не получается, в комеент, и дальше...

http://thinkit.ru/images/blog/usersdata/219/toolbarThinkIT2.rar
Zoomskij Zoomskij | 05 Апреля 2010 22:03ссылка сюда
Ну вот снова... тут выходит новая Visual Studio 2010. Официальный релиз намечен на 12 апреля, но RS-версию можно скачать уже прямо сейчас. Так что я наверное буду переписывать проект уже в ней, а то опять накинетесь, что пользуюсь устаревшими технологиями.
iNik iNik | 21 Августа 2010 15:50ссылка сюда
Поскольку разработка тулбара, насколько я понимаю остановилась, решил я собрать свой тулбар на основе популярного сервиса. Скачать и попробовать его можно отсюда: http://thinkitru.rubar.ru
Авторизуйтесь чтобы не быть Серой Анонимностью!

 

Играть в тетрис бесплатно он-лайн, без регистраций и смс =)






Время играть в тетрис!

Играть в тетрис проще простого. Жмем на иконку и вперед.


Найди нас везде!

Теперь ты можешь найти нас во всех популярных социальных сетях. Читай thinkit.ru где тебе удобно!


Банкоматы Таганрога

Теперь ты сможешь легко узнать, где именно находится ближайший банкомат.

 

 
  CreativeCUBE - разработка и поддержка сайтовПроизводство и поддержка сайтов
cCube.ru
  При воровстве с этого сайта ссылка обязательна.
Copyright © 2008-2012 thinkit.ru
Связаться с нами