Application Close

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Application Close

Сообщение 1Steps » 04.05.2007 (Пт) 3:50

Всем привет.
Обнаружил проблему, хочу вас спросить как с ней бороться?
В приложении есть глубокий цикл:

Код: Выделить всё
For a As Byte = LBound(arrBBBBBB) To LastNum
            For b As Byte = 1 To LastNum
                For c As Byte =  1 To LastNum
                    For d As Byte = 1 To LastNum
                        For f As byte = 1 To LastNum   
                            If stp = True Then
                                                 ' do something
                                                   exit sub
                                Else
' do something
                                    stp = False
                                End If
                            End If
                        Next
                    Next
                Next
            Next
        Next


Сделал защиту от дурака stp as Boolean/
T.e., если остановить цикл через переменную, то всё хорошо.
Но, если закрыть приложение стандартным способом, то форма исчезает с экрана, а в процессах все остаётся по прежнему.
Я так думаю, что цикл продолжает работать.
Как с этим боротся?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.05.2007 (Пт) 8:49

По тому коду, который ты привел ответ дать нельзя.
Ты используешь потоки? Com-вызовы? Обращения к dll?
исли используешь Application.DoEvents, то в событии FormClosing stp=true. Или в цикл вставляй проверку: If Me.IsDisposed Then Exit Sub. В остальных случаях надо приводить больше кода
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 04.05.2007 (Пт) 15:57

Я использую Application.DoEvents
Чисто машинально стер, когда выкладывал образец.
Удалена за ненадобностью.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 04.05.2007 (Пт) 18:04

Спасибо, заработало. :oops:
Удалена за ненадобностью.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 03.06.2007 (Вс) 18:26

Код: Выделить всё
For a As Byte = LBound(arrBBBBBB) To LastNum
            For b As Byte = 1 To LastNum
                For c As Byte =  1 To LastNum
                    For d As Byte = 1 To LastNum
                        For f As byte = 1 To LastNum

                        Application.DoEvents

                          If frmMDI.IsDisposed Then Exit Sub

                            If stp = True Then
                                                   exit sub
                                Else
                                           ' do something
                                End If
                            End If
                        Next
                    Next
                Next
            Next
        Next

И снова таже проблемма.
Если выше приведённый код находится в форме,
то при закрытии формы цикл прекращается.
Но если в модуле, то цикл не прерывается вплоть до окончания.
Подскажите, в чем проблемма?
Удалена за ненадобностью.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.06.2007 (Вс) 19:17

Код: Выделить всё
If stp = True Then
     exit sub
Else
     ' do something
End If

В принципе эта кострукция должна обеспечивать выход.
Больше ничего сказать не могу - нужен код.
Дебагером не смотрел? stp меняется?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 03.06.2007 (Вс) 20:16

.
Дебагером не смотрел? stp меняется?

Да
Извеняюсь, опять машинально скопировал первый пост.
Правильно так:
Код: Выделить всё
    Public Function InStore_Game(ByRef arrOut(,) As Integer, ByVal HowMany As Integer) As Integer
        Dim arrColumn(5) As Array
        Dim indx, s As Integer
        Dim random As New Random
        arrColumn(0) = Col1
        arrColumn(1) = Col2
        arrColumn(2) = Col3
        arrColumn(3) = Col4
        arrColumn(4) = Col5
        arrColumn(5) = Col6
        If Bns = True Then
            s = 5
            ReDim arrOut(5, HowMany - 1)
        Else
            s = 4
            ReDim arrOut(4, HowMany - 1)
        End If
        For j As Integer = 0 To HowMany - 1
            For i As Integer = 0 To s
                Dim min As Integer = 50
                For y As Integer = 0 To arrColumn(i).GetUpperBound(0)
                    If arrColumn(i)(y) < min Then min = arrColumn(i)(y)
                Next
                If i = 5 Then arrOut(i, j) = random.Next(1, 47) : Exit For
                Select Case min
                    Case Is < 1
                        Do Until False
                            Application.DoEvents()
                            If frmMDI.IsDisposed Then Exit Function
                            If btnStopClick = True Then Exit Function
                            indx = random.Next(0, arrColumn(i).GetUpperBound(0))
                            If i <> 0 Then
                                If arrOut(i - 1, j) >= indx + 1 Then Continue Do
                            End If
                            If arrColumn(i)(indx) = min Then
                                arrOut(i, j) = indx + 1
                                Exit Do
                            End If
                        Loop
                     case else
                           'Сюда код добалю позже
                           'потому как это тестовая функция и
                           'значение min не превышает ноль
                End Select
                frmMDI.ToolStripProgressBar1.PerformStep()
                If frmMDI.ToolStripProgressBar1.Value = 100 Then _
                frmMDI.ToolStripProgressBar1.Value = 0
            Next
        Next
        Return InStore_Game
    End Function        'Ok

В принципе, выше приведенный код отлично выходил из цикла при закрытии приложения когда он находился в форме.
Когда я перенес его в модуль он перестал работать.
Последний раз редактировалось 1Steps 03.06.2007 (Вс) 21:05, всего редактировалось 3 раз(а).
Удалена за ненадобностью.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 03.06.2007 (Вс) 20:44

Только очень всех прошу, если что-то не правильнов предыдущем посте, то не смеяться, а поправить меня.
Да опять забыл:
Код: Выделить всё
   Private Sub frmMDI_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        btnStopClick = True
        Application.Exit()
    End Sub
Удалена за ненадобностью.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 03.06.2007 (Вс) 23:15

Давай сделаем так: cделай копию своего проекта, вырежи ненужное(а можешь не вырезать) и скинь мне в личку. А то гадать на кофейной гуще неохота.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 03.06.2007 (Вс) 23:28

Уже
Удалена за ненадобностью.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList