Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры



Выпуск # 277


http://www.kbyte.ru/

 

Новый выпуск!

Здравствуйте дамы и господа!
Представляю очередной выпуск рассылки научно-информационного портала Kbyte.Ru. Надеюсь он Вам понравится. Если у Вас есть какие либо вопросы или предложения по рассылке, пишите нам – admin@kbyte.ru!

 

Содержание выпуска

Система ЭКСПЕРТ

    Вопрос #000807: Проблемы с закачкой файлов из Интернета на Ginz...

    Вопрос #000804: Проблемы с загрузкой файлов на Ginza MS100

    Вопрос #000799: Новый вопрос без темы

    Вопрос #000791: Проблема_в_VB_.NET_с_использованием_функции_из_...

    Вопрос #000764: Програмное определение позиции меню в vb6

Последнее на форумах

    вопрос по Picturebox

    Выполнение SQL--скрипта в VB ASP.NET

    Видеопоток с Веб - камеры

    Денвер и пара мелкий вопросов...

    Потоки

Последние статьи

    Как узнать размер базы данных MySQL через php

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

    Выбор языка программирования для научных работ (2-я редакция)

Интересные коды и решения

Юмор на Kbyte.Ru

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, просто спросите и получите ответ ;-)


Вопрос #000807: Проблемы с закачкой файлов из Интернета на Ginz...

Автор вопроса: Koshpaev Valery // 03.03.2008 / 18:36

Здравствуйте,уважаемые эксперты!Может вся проблема заключается в том,что я не установил на Джинзу ActiveSync 4.5 с установочного диска,который прилагается к коммуникатору?Только я не знаю где,в каком клубе в Москве я могу закачать эту программу на компьютер,а потом перекачать ее с компьютера на свой коммуникатор,т.к.я пытался обращаться в одно интернет-кафе,другое,но нигде мне не разрешали закачивать ActiveSync на компьютер с установочного диска для Джинзы.У моего коммуникатора есть GPRS,но нет EDGE-какую лучше скорость подключения к
Интернету мне подключить,и почему всегда прерывается связь при закачке файлов 3.gp,всегда выдавая мне сообщение об однои и той же ошибке,про которую я Вам уже писал?Валерий ________________________________________________________ Вы уже с Yahoo!? Испытайте обновленную и улучшенную. Yahoo! Почту! http://ru.mail.yahoo.com

Отвечает: Алексей Немиро // 04.03.2008 / 05:48

Здравствуйте, Валерий.

ActiveSync необходим для синхронизации данных с ББ (ББ – большой брат :) – обычный компьютер).
Следует отметить, что если например, у Вас
будут в личных папках размещены какие-либо файлы, а на ББ этих файлов
не будет, то с устройства при синхронизации они будут удалены, так что
важные данные лучше хранить где-нибудь в другом месте, например на
карточке памяти, либо в любой другой папке, не имеющей отношения к
личным папкам (Мои документы, Мои мелодии и т.п.) пользователя
устройства.

Так что в данном случае, установка данного софта на компьютер в клубе
бессмысленна, да и Ваши личные данные могут стать достоянием
общественности (на локальном компьютере в папке «Мои документы»
создается папка с данными из личных папок устройства).

Рекомендую найти какого-нибудь друга в Москве, и воспользоваться для
этих целей его компьютером.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000804: Проблемы с загрузкой файлов на Ginza MS100

Автор вопроса: Koshpaev Valery // 02.03.2008 / 13:30

Здравствуйте,эксперты!У меня есть коммуникатор Ginza MS100(CPU:ARM 926TI OMAP 750@200MHz;128MB ROM+64MB RAM;OC:Microsoft Windows Mobile 5.0),но у меня нет компьютера или ноутбука.Мой коммуникатор Джинза имеет встроенный браузер для выхода в Интернет.Я хочу закачивать небольшие фильмы и видеоролики напрямую из Интернет,а также различные программы-тоже из Интернета.Но всегда при попытках скачивания файлов из Интернет появляются сообщения об ошибках:1)"Данный файл не читается(не отображается)на устройстве"2)"Неизвестная ошибка при скачивании файлов
0X80004005"(что это за код и из-за чего он появляется,что он означает?)3)"Искомую страницу не удается найти из-за неизвестной ошибки 0x80072f78"(что это за код и из-за чего он появляется,что он означает?)4)Какую программу,видеоконвертер мне надо установить на Ginza MS100,чтобы я мог скачивать различные медиафайлы из Интернета своей Джинзой и откуда я могу эту программу скачать(лучше-бесплатно!)?Пожалуйста,вышлите ответы на этот адрес моей почты!-Заранее большое Вам спасибо и очень надеюсь на Вашу помощь!Валерий ________________________________________________________ Вы уже с Yahoo!? Испытайте обновленную и улучшенную. Yahoo! Почту! http://ru.mail.yahoo.com

Отвечает: Алексей Немиро // 04.03.2008 / 05:37

Здравствуйте, Валерий.

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

Вообще, большие файлы лучше не качать по GPRS, это не надежно и
дороговато. Обычно все, что нужно закачивают на устройство через
компьютер.

В качестве плеера могу порекомендовать Core Player, а как альтернативу
IE, можно использовать Opera.
Все это дело можно найти на сайте 4pda.ru.

Что касается файлов других форматов, то обычно, эти файлы в Интернет размещены в
архивах zip или rar, WM такие файлы не понимает,
нужно устанавливать дополнительные программы, чтобы работать с файлами
архивов, например файловый обозреватель Resco Explorer 2007
может читать zip-архивы. Файлы установок обычно идут в формате
cab, они вполне нормально должны запускаться.
Некоторые программы могут быть размещены как обычные
Windows-инсталеры, т.е. чтобы их установить потребуется компьютер и
подключить устройство к нему.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000799: Новый вопрос без темы

Автор вопроса: Максим // 01.03.2008 / 18:57

При попытке открыть дизайнер формы в Visual Studio 2008 возникает ошибка
"The service Microsoft.VisualStudio.Shell.Interop.ISelectionContainer
already exists in service container/ Parameter name: serviceType". Данная
ошибка возникает на всех языках программирования.

Отвечает: EROS // 01.03.2008 / 22:10

 

Вопрос #000791: Проблема_в_VB_.NET_с_использованием_функции_из_...

Автор вопроса: Mikhail Belov // 29.02.2008 / 18:28

Отлаживаю программу в среде разработки Microsoft Visual Basic.NET, возникает проблема:
В ходе исполнения в Отладчике при вызове функции из DLL-библиотеки получаю диагностику
в окне Microsoft Development Environment:

-------------------------------
Необработанное исключение типа "System.NullReferenceException" произошло в Modul.exe.

Дополнительные сведения: в экземпляре объекта не задана ссылка на объект.
-------------------------------

Моdul - имя отлаживаемой программы.

Отладчик "подсвечивает" строку с вызовом функции из библиотеки:
res = ReadIEEE32(8, 0, "rEAd", val, tm, 0)

Переменные объявлены выше в модуле:
Dim res As Long
Dim val As Single

Функция из DLL-библиотеки объявлена в модуле:
Private Declare Function ReadIEEE32 Lib "owen_io" _
(ByVal adr As Long, ByVal adr_type As Long, _
ByVal command As String, ByRef res As Single, _
ByRef time As Long, ByVal Index As Integer) As Long



В Help'e на библиотеку функция описана следующим образом:
для C++
int ReadIEEE32(DWORD adr,DWORD adr_type,char *command,float &value,int &time,int index);

для VB
Function ReadIEEE32(ByVal adr As Long, ByVal adr_type As Long, ByVal command As String, res As Single, time As Long, ByVal Index As Integer) As Long

Подскажите, что делать ?

Отвечает: EROS // 01.03.2008 / 08:27

По всей видимости дело в неправильном объявлении функции. Попробуйте
Long заменить Integer.

 

Вопрос #000764: Програмное определение позиции меню в vb6

Автор вопроса: Иван Денишев // 16.02.2008 / 23:24

Здравствуйте уважаемые эксперты!
Говорят, что вы можете ответить на любой вопрос.
Как программно в vb6 узнать, на каком пункте меню находится курсор.
Для примера, возьмём меню "файл".
Caption | Name
Файл | MnuFile
Создать | MnuFileNew
Открыть | MnuFileOpen
Ну, и пожалуй, хватит. И так будет понятно.
Запускаем программу и жмём: либо f10, либо alt.
Затем стрелку вниз.
Меню "Создать", выделится другим цветом.
Так вот, как программно получить, где находится курсор?
Ведь, в vb нету свойства GotFocus у менюшек.
Очень надеюсь на вашу помощь!
---
С уважением: Иван Денишев.

Отвечает: Алексей Немиро // 17.02.2008 / 10:12

Здравствуйте, Иван.

ВНИМАНИЕ: Данный пример довольно опасный, и может привести к зависанию Visual Basic!

Скачать готовый пример можно тут: http://kbyte.ru/Code/Samples/form1.zip

Создайте новый EXE-проект, на форме разместите Timer и вставьте следующий код:

Код формы:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
Option Explicit

Private Sub Form_Load()
 gHW = Me.hwnd
 Hook
End Sub

Private Sub Form_Unload(Cancel As Integer)
 Unhook
End Sub

Private Sub Timer1_Timer()
 Me.Caption = SelectedMenuString
End Sub


Также добавьте несколько элементов меню.
Дополнительно создайте новый модуль и вставьте следующий код:

Код модуля:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
Option Explicit

Public SelectedMenuString As String 'здесь будет заголовок выбранного элемента меню

Private Declare Function CallWindowProc Lib "user32" _
  Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
  ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetMenu Lib "user32" _
 (ByVal hwnd As Long) As Long

Private Declare Function GetSubMenu Lib "user32" _
 (ByVal hMenu As Long, ByVal nPos As Long) As Long

Private Declare Function GetMenuItemCount Lib "user32" _
 (ByVal hMenu As Long) As Long

Private Declare Function GetMenuState Lib "user32" _
 (ByVal hMenu As Long, ByVal wID As Long, _
  ByVal wFlags As Long) As Long

Private Declare Function GetMenuString Lib "user32" _
  Alias "GetMenuStringA" (ByVal hMenu As Long, _
  ByVal wIDItem As Long, ByVal lpString As String, _
  ByVal nMaxCount As Long, ByVal wFlag As Long) As Long

Private Const MF_BYPOSITION = &H400&
Private Const MF_HILITE = &H80&
Private Const WM_MENUSELECT = &H11F
Private Const GWL_WNDPROC = -4

Public lpPrevWndProc As Long
Public gHW As Long

Public Sub Hook()
  'Begin hooking into messages.
  lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
  AddressOf WindowProc)
End Sub

Public Sub Unhook()
  'Cease hooking into messages.
  SetWindowLong gHW, GWL_WNDPROC, lpPrevWndProc
End Sub

Function AnyLit(hSubSubMenu As Long) As Long
  Dim i As Long
  Dim MenuCount As Long

  'Get the number of items in the menu.
  MenuCount = GetMenuItemCount(hSubSubMenu)

  'Loop through the menu items.
  For i = 0 To MenuCount - 1
    'Check whether this item is highlighted.
    If GetMenuState(hSubSubMenu, i, MF_BYPOSITION) And _
        MF_HILITE Then
      AnyLit = True
      Exit Function
    End If
  Next i

  'Return FALSE, no items highlighted.
  AnyLit = False
End Function

Private Sub WalkSubMenu(hSubMenu As Long)
  Dim i As Long
  Dim MenuItems As Long
  Dim hSubSubMenu As Long
  Dim buffer As String
  Dim result As Long

  'Get the count of menu items in this menu.
  MenuItems = GetMenuItemCount(hSubMenu)

  'Loop through all the items on the menu.
  For i = 0 To MenuItems - 1
    'Determine whether this item is highlighted.
    If GetMenuState(hSubMenu, i, MF_BYPOSITION) And _
        MF_HILITE Then
      'Attempt to get a submenu for each menu item.
      hSubSubMenu = GetSubMenu(hSubMenu, i)

      'Check for a submenu with something selected on it.
      If hSubSubMenu And AnyLit(hSubSubMenu) Then
        'There is a submenu with a selection so walk it.
        WalkSubMenu hSubSubMenu
      Else
        buffer = Space(255)
        result = GetMenuString(hSubMenu, i, buffer, Len(buffer), MF_BYPOSITION)
        buffer = Left$(buffer, result)
        SelectedMenuString = GetDescription(buffer)
        Exit Sub
      End If
    End If
  Next i
End Sub

Public Sub FindHilite(TheForm As Form)
  Dim hMenu As Long
  Dim hSubMenu As Long
  Dim i As Long
  Dim MenuCount As Long

  'Clear any previous description.
  SelectedMenuString = ""

  'Get the menu handle.
  hMenu = GetMenu(TheForm.hwnd)

  'Check to see if there is no menu.
  If hMenu <> 0 Then
    'Get the number of top-level menus.
    MenuCount = GetMenuItemCount(hMenu)

    'Enumerate through all top-level menus.
    For i = 0 To MenuCount - 1
      'Ignore top-level menus not currently selected.
      If GetMenuState(hMenu, i, MF_BYPOSITION) And _
          MF_HILITE Then
        'Get a handle to the submenu.
        hSubMenu = GetSubMenu(hMenu, i)

        'Walk the submenu.
        WalkSubMenu hSubMenu
      End If
    Next i
  End If
End Sub

Private Function GetDescription(MenuCaption As String) As String
 GetDescription = MenuCaption
End Function

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 If uMsg = WM_MENUSELECT Then
  FindHilite Form1
 End If
 WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function


При выборе элемента меню в переменной SelectedMenuString будет текст заголовка выбранного элемента меню.

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

вопрос по Picturebox | Автор: nezabudka
Добавлено: 11.03.2008 / 10:09 | ответов: 0 | просмотров: 22

У меня такой вопрос...Нужно в Picturebox написать текст к примеру 2 в четвертой степени...не подскажете как написать эту четвертую степень?

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Выполнение SQL--скрипта в VB ASP.NET | Автор: comexe
Добавлено: 11.03.2008 / 05:39 | ответов: 0 | просмотров: 24

Уважаемые товарищи!!! Предо мной встала задача построения SQL-запроса для ASP под VB2005.
Я, как старый VB60щик пробывал там делать типа такого:
001:
002:
003:
004:
005:
Dim SQL As String
SQL="Select * From Employees Where LastName Like""'%"&Text1.Text&"'"
DbGrid1.RecordSource=SQL

Colorized by: Eros.CodeSyntaxColor Engine

и запрос удовлетворялся правильно.
Не подскажит ли мне кто-нибудь синтаксис SQL для VB.ASP 2005?

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Видеопоток с Веб - камеры | Автор: Игорь Голов
Добавлено: 10.03.2008 / 00:57 | ответов: 0 | просмотров: 29

Как получить поток видео с Веб - камеры, используя Microsoft Windows Image Acqusition?

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Денвер и пара мелкий вопросов... | Автор: Kolya007
Добавлено: 29.02.2008 / 09:02 | ответов: 2 | просмотров: 109

Есть ли возможность сделать так, чтобы Apache входящий в состав Денвера, читал asp, а не только php... Если да, то как это можно сделать...))
А теперь к мелочам...))
1) Непомню спрашивал или нет... Как сделать переадресацию в php?..
2) Сессии и куки в php... Как их создавать, проверять их наличие и т.д.?..
3) Какие есть возможности для создания авторизации в php?..
4) И вопрос по верстке...)) Как сделать, чтобы div разпологались относительно объекта (другого div и т.п.) и имели размер в зависимости от экраннго разрешения?..
5) Где хранится информация о системе пользователя?..

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:29.02.2008 / 10:48
1. Помню, что уже отвечал :)
header("Location: Путь_Редиеркта");

2.
001:
002:
003:
004:
005:
006:
if(!isset($_SESSION)) { // нет сессии
session_cache_expire(60); // создаем
session_start();
}

Colorized by: Eros.CodeSyntaxColor Engine

001:
002:
003:
004:
005:
006:
if (!isset($_SESSION["Abrakadabra"])) // нету параметра Abrakadabra
{
 $_SESSION["Abrakadabra"] = "Kbyte.Ru откройся!"; // создаем
}

Colorized by: Eros.CodeSyntaxColor Engine

001:
002:
003:
echo $_SESSION["Abrakadabra"];

Colorized by: Eros.CodeSyntaxColor Engine

про кукисы уже не помню ничего :)

3. Есть замечательная возможность изобрести такую возможность самому :)

4. Размер относительно разрешения экрана ставь процентами, либо ставь отступы от краев, также процентами, либо пикселями.
для выравнивания используй
001:
position: relative; float: left

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

5. Какая такая система пользователя? Если ты имеешь ввиду большого полосатого муха, которого юзает клиент, то эту инфу можно получить только JavaScript-ом, на стороне клиента.

6. Жаль что я забыл написать правило, которое запрещало бы задавать кучу вопросов одним топиком :), но ничего, как изганю дух лени из своего компутера, обязательно напишу такое правило, а пока радуйтесь, что его нет :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Kolya007
Добавлено:29.02.2008 / 19:33
Спс...))
PS:
Если ты имеешь ввиду большого полосатого муха, которого юзает клиент, то эту инфу можно получить только JavaScript-ом, на стороне клиента.

Его самого...))
Жаль что я забыл написать правило, которое запрещало бы задавать кучу вопросов одним топиком :), но ничего, как изганю дух лени из своего компутера, обязательно напишу такое правило, а пока радуйтесь, что его нет :)

Зато так удобнее...))

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Потоки | Автор: Inf
Добавлено: 29.02.2008 / 00:40 | ответов: 10 | просмотров: 250

Вопрос, как можно запустить поток и при этом передать значение в переменную? т.е

001:
002:
003:
004:
005:
Public Sub main_thread(ByVal value As String)
'тут код который нужно запустить в поток и который очень часто использует значение из value
End Sub

Colorized by: Eros.CodeSyntaxColor Engine


При запуске потока обычным способом:
001:
002:
003:
Thread1 = New Thread(AddressOf main_thread("передаём данные"))

Colorized by: Eros.CodeSyntaxColor Engine

не чего не выходит, читал в MSDN вот тут всё про потоки:
http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/vbcn7/html/vaconfreethreading.asp
но к сожелению нет ни слова возможно ли реализовать то что мне нужно :(
И ещё вопросик, в место AddressOf Visual Studio предлагает на выбор, сам AdressOf и Function, вот что это за Function? экспериментировал, не чего не вышло, спасибо


Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:29.02.2008 / 04:41
Вопрос, как можно запустить поток и при этом передать значение в переменную?

Нужно использовать делегаты

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: EROS
Добавлено:29.02.2008 / 08:00
1. Параметр должен быть типа Object (Public Sub main_thread(ByVal arg As Object))
2. В конструкторе Thread1 никаких паметров передавать не надо (Thread1 = New Thread(AddressOf main_thread))
3. Параметр передается в методе Start ( Thread1.Start(arg) )
4. Внутри потока параметр из типа Object приводишь к нужному тебе типу(в твоем случае приведение к String) и спокойно с ним работаешь.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Inf
Добавлено:01.03.2008 / 16:45
Ребят, спасибо большое, выручили! Всё прекрасно работает, многопоточность просто класс, давно искал решение и нашел его в потоках :)
EROS
отдельное спасибо за объяснение простым и подробным языком :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Inf
Добавлено:01.03.2008 / 22:16
Возник ещё вопрос, странно как то, у меня есть 2 примера, один простенький где есть 1 поток в котором производятся арифметические действия и вывод на TextBox во время запуска у меня есть возможность полностью двигать форму сворачивать разворачивать, все кнопки активны, собственно говоря для этого я и использую многопоточность, а вот в моём приложении в котром идёт работа с массой файлов и большими размерами всё работает но не могу двигать ни форму не нажимать кнопки вообще не чего, хотя прогресс бары работают, всё нормально, скажите пожалуйста, какие могут быть проблемы? я понимаю без кода трудно, но вообще если предположить, из-за чего может случиться такая ситуация? ведь точно такая же реализация потока в другом примере работает на ура

P.S Использую Control.CheckForIllegalCrossThreadCalls = False
т.к с делегатами тоже не работает в моём коде и точно такой же код использования делегатов отлично работает в другом :) приложение просто виснит, не реагирует и не чего не делает, я думаю всё же что то у меня с кодом, но всё же хочеться услышать мнение опытных людей, спасибо за внимание

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: EROS
Добавлено:01.03.2008 / 22:30
я думаю всё же что то у меня с кодом

Логично )))
Использую Control.CheckForIllegalCrossThreadCalls = False

НИКОГДА ТАК НЕ ДЕЛАЙ! По всей видимости у тебя из за этого все и висит.. Когда отключают эту проверку в итоге получают взаимоблокировку в лучшем случае , а в худшем - deadlock.
Потоки должны разруливаться ТОЛЬКО через делегаты.. и по другому никак.
с делегатами тоже не работает в моём коде

Чудес на свете не бывает. Делегаты по определению не могу не работать. Ищи косяк в коде.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Inf
Добавлено:02.03.2008 / 21:34
Ищи косяк в коде.

Вы правы :) ошибка в коде, нашел и исправил, теперь делегаты работают, форма отвечает всем запросам, и
001:
002:
003:
Control.CheckForIllegalCrossThreadCalls = False

Colorized by: Eros.CodeSyntaxColor Engine

убрана, вообщем всё то что я хотел, теперь осталось только как то покрасившее написать код, а именно при работе с делегатами, я не разу с ними не сталкивался, вот это первые дни работы с ними, нашел в сети пару примеров, все они почти одинаковы, я юзаю делегаты так:
001:
002:
003:
004:
005:
006:
007:
008:
009:
‘Объявляем делегат
Delegate Sub text1_value(ByVal value As String)
Dim Set_value As text1_value = AddressOf Change_value

Private Sub Change_value(ByVal value As String)
  TextBox1.Text = value
End Sub

Colorized by: Eros.CodeSyntaxColor Engine

А вот так его применяю:
001:
002:
003:
TextBox1.invoke(change_value,”Наш текст”)

Colorized by: Eros.CodeSyntaxColor Engine

Всё работает но такое ощущение что написано как то криво :) дело в том что из потока происходит очень много обращений к разным контролам, если для каждого писать то что выше то получиться мягко говоря глупо, собственно вопрос, существует ли универсальное решение? Которое позволит получать доступы к разным контролам при минимуме коде и усилий.

P.S Подскажите куда можно вставить MsgBox который вызовется после завершения потока, собственно из-за этого у меня и была ошибка, я побывал различные функции, и в различные места вставлял код, но безрезультатно, спасибо

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: EROS
Добавлено:02.03.2008 / 23:12
такое ощущение что написано как то криво :)

Ощущениям надо доверять! :-)
существует ли универсальное решение? Которое позволит получать доступы к разным контролам при минимуме коде и усилий

Универсального кода, как такового, нет. Но есть некоторые общепринятые правила и шаблоны разработки и каждая конкретная задача требует своего решения, которое наиболее подходит в данной ситуации. Вариантов решения твоей проблемы - масса! Вот один из простейших вариантов: (к сожалению не использую VB, поэтому код набросал на C#, но общая идея, я думаю, будет ясна)
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
/// <summary>
  /// Thread example
  /// </summary>
  /// <remarks>
  /// Add Label(Name=Label1) to form
  /// </remarks>
  public partial class frmMain : Form
  {

    delegate void SetPropertyHandler(Control ctrl, ControlProperty prop, object arg);
    enum ControlProperty { Text, BackColor, ForeColor };

    public frmMain()
    {
      InitializeComponent();
    }

    protected override void OnShown(EventArgs e)
    {
      base.OnShown(e);

      /** Create new thread */
      Thread thread = new Thread(DoWork);
      thread.IsBackground = true;
      thread.Start();
    }

    private void DoWork()
    {
      for (int i = 0; i < 10000; i++)
      {
        SetProperty(label1, ControlProperty.Text, i);
      }

      SetProperty(label1, ControlProperty.Text, "Done ...");
      SetProperty(label1, ControlProperty.ForeColor, Color.Green);
    }

    private void SetProperty(Control ctrl, ControlProperty prop, Object arg)
    {
      /** Check input parameters */
      if (ctrl == null || arg == null) throw new ArgumentNullException();

      /** Check thread state */
      if (InvokeRequired)
      {
        SetPropertyHandler d = new SetPropertyHandler(SetProperty);
        Invoke(d, new Object[] { ctrl, prop, arg });
      }
      else
      {
        /** Set control property */
        switch (prop)
        {
          case ControlProperty.Text:
            ctrl.Text = arg.ToString();
            break;
          case ControlProperty.BackColor:
            ctrl.BackColor = (Color)arg;
            break;
          case ControlProperty.ForeColor:
            ctrl.ForeColor = (Color)arg;
            break;
          default:
            throw new NotImplementedException();
        }

        /** Update control */

        Application.DoEvents();
      }
    }
  }

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Inf
Добавлено:04.03.2008 / 18:49
Спасибо :) посмотрел ещё на форумах да в интернете про делегаты и написал универсальное средство в котором не требуется писать для каждого контрола процедуру, мой проект движется к завершению :) это не может не радовать, теперь ещё одна проблема, проект работает с файлами большого размера (бывают >200mb) сначало идёт считывание файла в массив, и после в уже в цикле For each работа с ним, так вот, после запуска программы, проходит вся обработка, всё работает как нужно, НО в диспетчере задач моя программа потребляет 500мб памяти, я не удивляюсь :( ведь идёт считывание в память, но когда работа завершается, вроде бы не происходит ни каких действий, но в памяти программа до сих пор кушает это же количество ресурсов, дело не в потоке, смотрел во время отладки Debug>Window>Thread после обработки поток нормально закрывается, но всё равно что то висит в памяти, смотрел переменные, все пустые, я с таким не сталкивался и даже не знаю с чего начать искать информацию, может быть есть какие-нибудь предположения? Читал что то о сборщике мусора, а так же думаю моё решение задачи не верное :( читал что можно как то читать из файла построчно, обрабатывать, и тут же выводить в файл результат, но этот способ мне не много не подходит (идёт работа со строками, именно со строками а не строкой, при некотором условии в переменную пишется определенная строка)...но и считывание в память тоже как то не очень т.к требование ресурсов очень огромное, вот в замешательстве, есть мысли по этому поводу?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 9 | Автор: EROS
Добавлено:10.03.2008 / 08:49
Попробуй после всех твоих махинаций с текстом принудительно вызвать сборщик мусора GC.Collect(). По идее это должно освободить занимаемые ресурсы.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 10 | Автор: Inf
Добавлено:11.03.2008 / 00:03
абсолютно верно, уже поискал решение проблемы, после всех операций над файлом и после выхода из цикла вызываем сборщик мусора и все ресурсы освобождаются, как прочитал лучше вызывать вот так:
001:
002:
003:
GC.Collect(0)

Colorized by: Eros.CodeSyntaxColor Engine

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

Небольшой вопрос, чтобы не создавать для такой мелочи новую тему:
Использую NotifyIcon, при сворачивании формы выполняется этот код Me.Hide, и остается только значок в трее, при двойном клике на значок в трее появляется главная форма Me.Show, но как сделать её активной? т.е она появляется но за остальными окнами, как сделать фокус на неё? пробовал разные методы, в имеющихся учебниках об этом ни слова, спасибо

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Как узнать размер базы данных MySQL через php
Автор: Николай Рудченко | добавлено: 14.02.2008 / 13:01 | просмотров: 149

В этой небольшой статье вы узнаете, как получить размер вашей базы данных (БД) MySQL используя язык программирования PHP.

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 3125

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 5852

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 1596

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

Выбор языка программирования для научных работ (2-я редакция)
Автор: Юдин С. Ю. | добавлено: 15.03.2007 / 02:49 | просмотров: 4307

Идея написания этой статьи возникла после того, как на одном из сайтов по физике http://physics.nad.ru/aniboard/messages/291.html я обнаружил интересный алгоритм моделирования движения тела в поле постоянной напряженности по различным направляющим. Вернее, меня заинтересовал не весь алгоритм, т.к. основа их всех одна (принцип Даламбера, если не считать квазиалгоритма с применением уравнений Лагранжа 2-го рода) и различаются они только способом определения реакций в месте соприкосновения тел. ...

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Как проверить корректность E-Mail?
Дата добавления: 17.08.2006 / 18:18 | просмотров: 1681 | платформа: VB

Как нарисовать что-либо на Form/PictureBox?
Дата добавления: 24.03.2007 / 10:15 | просмотров: 1118 | платформа: VB .NET

Использование включаемых файлов
Дата добавления: 01.08.2006 / 11:40 | просмотров: 1319 | платформа: ASP

Как показать первую копию программы, если запускается вторая?
Дата добавления: 04.08.2006 / 09:06 | просмотров: 1216 | платформа: VB

Как узнать IP-адрес текущего посетителя?
Дата добавления: 31.07.2006 / 15:34 | просмотров: 2062 | платформа: ASP .NET (VB)

Как получить имя пользователя? (System.Security)
Дата добавления: 24.03.2007 / 12:21 | просмотров: 1186 | платформа: VB .NET

Как определить, какие кнопки мыши нажаты?
Дата добавления: 16.08.2006 / 19:45 | просмотров: 1323 | платформа: VB

Как показать сообщение?
Дата добавления: 16.08.2006 / 23:31 | просмотров: 1467 | платформа: VB

Как программно закрыть форму?
Дата добавления: 01.08.2006 / 17:20 | просмотров: 1327 | платформа: VB .NET

Как удалить все HTML-теги из текста?
Дата добавления: 24.03.2007 / 12:41 | просмотров: 1545 | платформа: VB .NET

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

Дочка спрашивает маму:
- А кто этот страшный, волосатый дядя с красными глазами?
- А это твой папа.
- А он что заболел?
- Нет, к интернету подключился...

 

Рейтинг: 219
Всего голосов: 352
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

"Умный учится на чужих ошибках..." Продукты Майкрософт - век живи, век учись!

 

Рейтинг: 168
Всего голосов: 283
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Дирижер нового интернационального симфонического оркестра представляет музыкантов иностранным журналистам:
- Это Петров, русский. Петренко, украинец. Петросян, армянин. Петашвили, грузин. А это Рабинович, скрипач.

 

Рейтинг: 89
Всего голосов: 164
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

У одной провайдерской фирмы спросили:
- Почему Вы так активно создаете сервисы бесплатного e-mail?
- Ну, как Вам сказать...
А Вы читали когда-нибудь чужую почту?

 

Рейтинг: 222
Всего голосов: 340
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Сидят два программиста в офисе. Вдруг звонок телефонный, на проводе шеф:
- Ну, ребята, чем занимаетесь?
- Козла забиваем!
- В домино играете?!
- Да нет, в DOOM!

 

Рейтинг: 207
Всего голосов: 327
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Учительница повела детей в лес на экскурсию. И вдруг говорит:
- Смотрите, дети, кого я нашла! Кто это весь в иголках?
- Не знаем.
- Вспомните, мы про него песни пели и стихотворения учили.
- Ах вот ты какой, дедушка Ленин!

 

Рейтинг: 716
Всего голосов: 952
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Сколько нужно программистов, чтобы убить таракана?
- ...
- Два! Один держит его за ноги, а второй на него Винду ставит!

 

Рейтинг: 193
Всего голосов: 277
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Товарищ прапорщик, "расстегай" - это мясо или рыба?
- Идиот! Это команда!!

 

Рейтинг: 135
Всего голосов: 235
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Вольво цепляет на пеpекpестке джип. Все останавливаются, из джипа
вываливают pебята в споpтивной фоpме и подходят к водителю Вольво.
- Hу все мужик, ты попал! Пpодавай машину, пpодавай кваpтиpу,
с тебя деньги!
- Ребята, а кто вы такие?
- Мы? - удивленно - Мы споpтсмены!
Мужик достает пистолет и, заpяжая его:
- Hу тогда HА СТАРТ! ВHИМАHИЕ! .....

 

Рейтинг: 168
Всего голосов: 281
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Муж жалуется жене - я ввел пароль в твой компъютер но он ответил: "пароль не подходит - слишком короткий"...
- а какой ты пароль вводил?
- пенис!

 

Рейтинг: 181
Всего голосов: 317
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное