Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
105 / 33 / 1
Регистрация: 01.10.2010
Сообщений: 310

Разбор потоков

18.04.2011, 19:13. Показов 1427. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В ходе коддинга возникла проблема: доступ к контролам на форме не возможен из другого потока. Для примера возьмём вот это
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
   Private Sub loginandretr()
        Try
            'переменые
            Dim response As String
            Dim from As String = Nothing
            Dim subject As String = Nothing
            Try
                mailclient = New TcpClient("POP.mail.ru", 110) ' конект к хосту по порту 110
            Catch generatedExceptionName As SocketException
                MsgBox("Сервер POP3 не отвечает") 'выводим сообщение, если он не отвечает
                Return
            End Try
            ns = mailclient.GetStream()
 
            sr = New StreamReader(ns)
            sw = New StreamWriter(ns)
            response = sr.ReadLine()
            sw.WriteLine("User " + TextBox1.Text)
            sw.Flush()
            response = sr.ReadLine() 'получаем ответ от хоста
            If response = "-ERR" Then
                MsgBox("Сервер не отвечает")
                Return
            End If
            sw.WriteLine("Pass " + TextBox2.Text)
            sw.Flush()
            Try
                response = sr.ReadLine() 'получаем ответ от хоста
            Catch generatedExceptionName As IOException
                MsgBox("Логин или пароль неверен")
                Return
            End Try
            If response.Substring(0, 3) = "-ER" Then
               MsgBox("Логин или пароль неверен")
                Return
            End If
            MsgBox("УРА. ВЫ законектились")
            PictureBox1.Visible = True
            sw.WriteLine("stat")
            sw.Flush()
        Catch ex As Exception
            MsgBox("Критическа ошибка:" & ex.Message)
        End Try
 
    End Sub
Всё работает и месседж боксы вылетают когда надо и куда надо. А теперь исправим вот так вот
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
   Private Sub loginandretr()
        Try
            'переменые
            Dim response As String
            Dim from As String = Nothing
            Dim subject As String = Nothing
            Try
                mailclient = New TcpClient("POP.mail.ru", 110) ' конект к хосту по порту 110
            Catch generatedExceptionName As SocketException
                MsgBox("Сервер POP3 не отвечает") 'выводим сообщение, если он не отвечает
                Return
            End Try
            ns = mailclient.GetStream()
 
            sr = New StreamReader(ns)
            sw = New StreamWriter(ns)
            response = sr.ReadLine()
            sw.WriteLine("User " + TextBox1.Text)
            sw.Flush()
            response = sr.ReadLine() 'получаем ответ от хоста
            If response = "-ERR" Then
                MsgBox("Сервер не отвечает")
                Return
            End If
            sw.WriteLine("Pass " + TextBox2.Text)
            sw.Flush()
            Try
                response = sr.ReadLine() 'получаем ответ от хоста
            Catch generatedExceptionName As IOException
              picturebox1.visible=false
              picturebox2.visible=true
                Return
            End Try
            If response.Substring(0, 3) = "-ER" Then
               picturebox1.visible=false
              picturebox2.visible=true
                Return
            End If
            picturebox1.visible=false
              picturebox3.visible=true
            PictureBox2.Visible = false
            sw.WriteLine("stat")
            sw.Flush()
        Catch ex As Exception
            MsgBox("Критическа ошибка:" & ex.Message)
        End Try
 
    End Sub
Вб нет станет недовольно говорить, что из одного потока доступ невозможен.
Ладно, пойдём ему навстречу и добавим в самое начало это
VB.NET
1
 System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
Так, теперь вб.нет ничего не говорит, но просто скрывает все пикчер боксы. Возникает вопрос, что это за бред???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2011, 19:13
Ответы с готовыми решениями:

Разбор потоков. Не понимаю, как лучше сделать
if (checkBox1.Checked) { Thread ChBox1CHkd = new Thread(CHbox1Cheked); ...

Область видимости общей переменной для потоков + закрытие потоков
Есть два вопроса про потоки. Первый. Как можно сделать общую переменную для основного потока и моих ? struct ThreadInfo1 { int...

Разработать программу, генерирующую n потоков в пуле потоков CLR
Добрый вечер. Решил поделать старые лабораторные, которые мне уже давно нужно было сдавать, но встрял на одном задании: "Разработать...

6
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
18.04.2011, 20:04
Где потоки то? Откуда мы знаем эта процедура в основном потоке или нет? Если проблема при доступе к контролам формы то юзай invoke.
0
105 / 33 / 1
Регистрация: 01.10.2010
Сообщений: 310
20.04.2011, 20:09  [ТС]
Ага, легко сказать "юзай". перерыл кучу форумов и нашёл только это здесь. Но там рассказывается про текст бокс. Но у меня дела хуже. У меня пикчер бокс, который нужно сделать видимым, а значение булён делегат принимать не хочет
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
20.04.2011, 20:14
Provaider, выложи свой проект в Zip если не сложно, посмотрю, что можно сделать
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
20.04.2011, 21:11
Цитата Сообщение от Provaider Посмотреть сообщение
Ага, легко сказать "юзай". перерыл кучу форумов и нашёл только это здесь. Но там рассказывается про текст бокс. Но у меня дела хуже. У меня пикчер бокс, который нужно сделать видимым, а значение булён делегат принимать не хочет
VB.NET
1
2
3
4
5
6
7
8
 If Пикчербокс.InvokeRequired Then
Пикчербокс.Invoke(New Threading.ThreadStart(AddressOf PB))
            Else
       PB
End If
Sub PB()
Пикчербокс.show()
end sub
1
105 / 33 / 1
Регистрация: 01.10.2010
Сообщений: 310
21.04.2011, 11:07  [ТС]
ДАААААА, заработало. Спасибо
_Лёша_.
Ciberst, в конечном итоге твой код стал таким
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  Private Sub loginandretr()
        Try
            'переменые
            Dim response As String
            Dim from As String = Nothing
            Dim subject As String = Nothing
            Try
                mailclient = New TcpClient("POP.mail.ru", 110) ' конект к хосту по порту 110
            Catch generatedExceptionName As SocketException
                MsgBox("Сервер POP3 не отвечает") 'выводим сообщение, если он не отвечает
                Return
            End Try
            ns = mailclient.GetStream()
 
            sr = New StreamReader(ns)
            sw = New StreamWriter(ns)
            response = sr.ReadLine()
            sw.WriteLine("User " + TextBox1.Text)
            sw.Flush()
            response = sr.ReadLine() 'получаем ответ от хоста
            If response = "-ERR" Then
                If PictureBox2.InvokeRequired Then
                    PictureBox2.Invoke(New Threading.ThreadStart(AddressOf picturenocon))
                Else
                    picturenocon()
                End If
                Return
            End If
            sw.WriteLine("Pass " + TextBox2.Text)
            sw.Flush()
            Try
                response = sr.ReadLine() 'получаем ответ от хоста
            Catch generatedExceptionName As IOException
                If PictureBox2.InvokeRequired Then
                    PictureBox2.Invoke(New Threading.ThreadStart(AddressOf picturenocon))
                Else
                    picturenocon()
                End If
                Return
            End Try
            If response.Substring(0, 3) = "-ER" Then
                If PictureBox2.InvokeRequired Then
                    PictureBox2.Invoke(New Threading.ThreadStart(AddressOf picturenocon))
                Else
                    picturenocon()
                End If
                Return
            End If
            If PictureBox3.InvokeRequired Then
                PictureBox3.Invoke(New Threading.ThreadStart(AddressOf pictureyescon))
            Else
                pictureyescon()
            End If
            sw.WriteLine("stat")
            sw.Flush()
        Catch ex As Exception
            MsgBox("Критическа ошибка:" & ex.Message)
        End Try
 
    End Sub
    Sub pictureyescon()
        PictureBox3.Visible = True
        PictureBox1.Visible = False
        PictureBox2.Visible = False
    End Sub
    Sub picturenocon()
        PictureBox3.Visible = False
        PictureBox1.Visible = False
        PictureBox2.Visible = True
    End Sub
Всё работает. спс ещё раз. Надеюсь скоро закончу проект и выложу e-mail клиент для вб нет
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
21.04.2011, 14:34
Так ты Provaider, пиши в следующий раз конкретно, что тебе нужен пример кода, каков вопрос, таков ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2011, 14:34
Помогаю со студенческими работами здесь

Замедление работы потоков если запущено несколько потоков
Есть отдельный поток который движет красным квадратом. Он каждую миллисекунду меняет положение квадрата на пиксель. Есть другой поток, он...

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

Книга "Конечный автомат 2: Возвращение". Часть 1. Разбор. Глава 8. Имя, проверка строки и разбор до. На том ли я пути?
Наверное, иногда прилюдно выругаться полезно... Стоило мне в предыдущей теме написать "омерзительный конечный автомат", как...

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru