Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
-85 / 39 / 6
Регистрация: 07.08.2013
Сообщений: 948
Записей в блоге: 1
1
.NET 4.x

Дать понять пользователю, что программа что-то делает, а не зависла

08.08.2014, 12:53. Показов 1310. Ответов 5
Метки нет (Все метки)

Написал программу для поиска текста в файлах, но т.к. файлов много программа "зависает" на время перебора файлов и поиска в них.

Как сделать, что бы на время работы программы выводилось сообщение "Подождите! Я работаю!"?

Простите если это наивный вопрос, но я только еще учусь Vb.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2014, 12:53
Ответы с готовыми решениями:

Как показать пользователю, что программа не зависла, а выполняет какие-то операции
Добрый день,я сделал программу которая ищет нужные файлы на USB накопителях,от код что ищет файлы ...

Как показать пользователю, что программа не зависла?
Добрый день, уважаемые форумчане! В VB я не бум-бум! По этой причине нужна Ваша помощь. Может...

Как показать пользователю, что программа не зависла?
Реализую один из методов оптимизации. Соответственно, время и количество итераций до нахождения...

Подключение к SQL БД. С помощью progressBar показать пользователю что программа не зависла
Помогите разобраться с прогресс баром. Вообщем такая задача: я делаю подключение к SQL БД и пока...

5
288 / 269 / 107
Регистрация: 10.06.2011
Сообщений: 696
08.08.2014, 13:40 2
Просто на форме лейбл с надписью
"Подождите! Я работаю!"
показываешь перед началом работы(label1.Visible=true), а после окончания обратно скрываешь. А если нужно чтобы форма обновлялась, то задачу нужно в отдельный поток выделить, например, с помошью класса BackgroundWorker
0
es geht mir gut
11480 / 4711 / 1180
Регистрация: 27.07.2011
Сообщений: 11,431
08.08.2014, 13:58 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Anderis49 Посмотреть сообщение
программа "зависает" на время перебора
Поставьте в проблемное место(куда-нибудь в цикл) следующую строку
VB.NET
1
  Application.DoEvents()
Программа будет работать дольше, но "зависания" должны пропасть.
1
-85 / 39 / 6
Регистрация: 07.08.2013
Сообщений: 948
Записей в блоге: 1
08.08.2014, 14:06  [ТС] 4
Спасибо Darth Coder за оперативный ответ, но к сожалению видимость лэйба появляется совестно с формой.
Я сделал вторую форму с надписью и показываю ее, а первую на время вычислений скрываю.

Может быть это топорно и неграмотно?

Application.DoEvents() вписано, но не в цикле.

Сейчас попробую в цикл перенести.
0
Почетный модератор
21293 / 9027 / 1081
Регистрация: 11.04.2010
Сообщений: 11,015
08.08.2014, 15:20 5
Anderis49, Строка кода, которую подсказал SoftIce, конечно же, не сделает чудес, но для Вашей задачи подойдет.

Команда как бы освобождает интерфейс приложения на мгновение, но не стоит надеяться, что при этом фоновая операция продолжает выполняться, и если в это время начать взаимодействовать с GUI, например, перетаскивать форму, то "фоновый" процесс будет поставлен на "паузу"

Цитата Сообщение от Anderis49 Посмотреть сообщение
лэйба появляется совестно с формой
Такое возможно, если процедура поиска выполняется в загрузке формы.
Лечится следующим образом:

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
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Show()
        Label1.Text = "All of us will die!! AAA! Dont'panic, it's joke)"
        Application.DoEvents()
        'Процедура поиска
        Search("D:\", New String() {"*.jpg", "*.png", "*.gif"})
        Label1.Text = "Finish him (c) Mortal Combat"
    End Sub
 
'Это для примера, роли не играет
    Private Sub Search(ByVal fold As String, ByVal ParamArray mask() As String)
        Dim Dirs As String()
        Dim files As String()
        Dim cdir As String
        Try
            For Each M As String In mask
                files = System.IO.Directory.GetFiles(fold, M)
                If files.Length > 0 Then ListBox1.Items.AddRange(files)
                Text = ListBox1.Items.Count
                Application.DoEvents()
            Next
            Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
        Catch ex As Exception
        End Try
        If Not Dirs Is Nothing Then
            For Each cdir In Dirs
                Me.Search(cdir, mask)
            Next
        End If
    End Sub
2
-85 / 39 / 6
Регистрация: 07.08.2013
Сообщений: 948
Записей в блоге: 1
09.08.2014, 15:59  [ТС] 6
Большое спасибо всем за помощь и советы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2014, 15:59

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Понять, что делает программа
(defun join(m l) ;возвращает в список l те его эл-ты,к-е были перенесены (cond ((null m) l) ...

Дана программа понять что делает
Ниже приведина программа.Получив на вход число х , эта программа печатает два числа a и b. Укажите...

Что делает эта программа? Совсем не могу понять сути её
var i: integer; s: string; g: boolean; x: integer; begin readln(s); i := 1; g...

Не могу понять на что способен sort, и что делает его компаратор
Недавно мой знакомый рассказывал что-то про sort,говорил что с помощью него можно сортировать как...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.