Страницы: 1
RSS
Форма не отвечает
 
Приветствую.
Возникла проблемка с прогрессиндикатором.
Код
   ' запускаем прогрессбар
    pi.Show
    pi.StartNewAct 0, Timer

    ' считываем и закрываем
    With CreateObject("scripting.filesystemobject")
        With .OpenTextFile(filename, 1, True)
            ReadTXTfile = .ReadAll
            .Close
        End With
        On Error Resume Next
        With .OpenTextFile(filenameexclus, 1, False)
            If Err Then
                Err.Clear
                If msgAll__2 <> vbYes Then
                    If MsgBox("Файл не выбран." & vbLf & "Продолжить работу?", vbYesNo + vbInformation, "") = vbNo Then GoTo Exit_
                End If
            End If
            exclusTxt = .ReadAll
            .Close
        End With
        On Error GoTo 0
    End With

При работе в W7 Офис 2010 периодически в заголовке прогрессиндикатора появляется надпись (не отвечает), и прогрессиндикатор исчезает с экрана. Поднять получается только щелкнув по файлу в панели задач. Обнаружить какую либо систему не удается. Может 10 раз сработать нормально, затем начать работать с ошибкой, затем снова нормально.
Если прогрессиндикатор запускать после загрузки текстовых файлов - проблемы не возникает.
При работе в ХР и 2007 офисе проблемы не возникает, не зависимо от места запуска.
Для справки - размеры txt 50 и 15 Mb, обновление экрана отключено.
Пытался и Repaint вставить, и убить/запустить форму... Не помогает.
Где собака зарылась?
 
Вроде как DoEvents помогает
Учимся сами и помогаем другим...
 
Ну а что тут удивительного...
Excel подвисает на момент чтения огромного файла,
а Windows сама выводит сообщение «не отвечает» в заголовок окон, к которым вы обращаетесь,
если окно не реагирует на команды в течение какого-то времени.

Хотя... я сколько этим индикатором не пользуюсь, никогда таких проблем не было.

Поставьте пару DoEvents - перед With .OpenTextFile,
и перед exclusTxt = .ReadAll
либо читайте файл блоками (раз он такой огромный) - тогда подвисания не будет.

Короче, проблема не в моем индикаторе, — такая проблема будет с любой формой,
если ваш код подвешивает систему на несколько секунд.
(а избежать подвешивания при чтении огромного файла - никак)
 
Неудачно ответы наложились, и сообщение EducatedFool, увидел поздно.
Я на прогрессиндикатор и не грешил (хотя там, кроме имен процедур, от родного ничего не осталось). А вот DoEvents применял неправильно (после считывания txt). Поместил перед считыванием - все заработало. Спасибо.
Но почему в ХР и 2007 этого нет? Файлы-то одни?
Изменено: RAN - 11.03.2013 15:01:08
 
Цитата
RAN пишет:
Но почему в ХР и 2007 этого нет? Файлы-то одни?
Похоже, что в 2010 офисе что-то накрутили с обращением к внешним данным и порядком инициализации.
У меня на машине стоит Windows XP SP3, 2007 и 2010 офис, то есть, отличается только версия офиса. Так вот, если я вызываю Специальную вставку в 2010 офиса он задумывается, примерно, секунд на 10-30, пока появится окно Специальной вставки, а эта же в 2007 офисе выполняется с задержкой на 1-2 секунды. Проверял несколько раз с разными массивами данных, результат одинаковый.
Также, в 2010 офисе не обрабатывалось событие Workbook_Open, пока я не заменил функцию ТДАТА на СЕГОДНЯ, хотя в 2007 всё работало нормально.
Изменено: DEAD MAN - 11.03.2013 20:43:55
Пользователи, как школьники, учиться хотят далеко не все, а отличниками становятся единицы.
Проблема - это ситуация, в решении которой человек не заинтересован.
 
Спасибо за DoEvents, недавно тоже голову ломал с прогрессбаром, в итоге забил :)
*пойду исправлять все коды*
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
Страницы: 1
Читают тему
Наверх