Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar / 10 сообщений из 10, страница 1 из 1
29.01.2013, 21:35
    #38129705
maximIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
Добрый день. Есть главная форма frmMain, есть компонент frmProgressBarControl и форма frmProgressBar куда вставлен контрол

На главной форме рисуем кнопку которая запускает

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
            Dim maxValue As Integer = 1000000
            Dim progress As frmProgress = New frmProgress(maxValue)

            progress.Show(Me)

            For i As Integer = 1 To maxValue
                progress.FrmProgressControl.PerformStep(i)
            Next



вот код контрола
Код: vbnet
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.
Public Class frmProgressControl

    Public Sub New()

        InitializeComponent()

    End Sub

    Property MaximumValue() As Integer
        Get
            Return Me.ProgressBarControl.Properties.Maximum
        End Get
        Set(ByVal Value As Integer)
            Me.ProgressBarControl.Properties.Maximum = Value
        End Set
    End Property

    Property StepValue() As Integer
        Get
            Return Me.ProgressBarControl.Properties.Step
        End Get
        Set(ByVal Value As Integer)
            Me.ProgressBarControl.Properties.Step = Value
        End Set
    End Property

    Public Sub PerformStep(LabelValue As String)
        Me.Label.Text = LabelValue
        Me.ProgressBarControl.PerformStep()

        Me.ProgressBarControl.Update()
        Me.Label.Update()
    End Sub
End Class



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

Как сделать прогресс видимым?
...
Рейтинг: 0 / 0
30.01.2013, 06:36
    #38130020
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
maximIZ,
Application.DoEvents() пробовали (после progress.FrmProgressControl.PerformStep(i))?
...
Рейтинг: 0 / 0
30.01.2013, 12:51
    #38130432
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
LameUser,

нет и еще раз нет!
Код: c#
1.
BackgroundWorker

. Таких уже тут тем 10 точно было...
...
Рейтинг: 0 / 0
30.01.2013, 13:55
    #38130570
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
netivanLameUser,

нет и еще раз нет!
Код: c#
1.
BackgroundWorker

. Таких уже тут тем 10 точно было...

Стоит ли овчинка выделенки?
Как понимаю товарищ просто хочет посмотреть процесс его цикла.
Тут же ему уже нужно будет почитать про потоки :)

В свое время временами я отказывался от backgroundworker'a в виду его дубовости и использовал родной Thread.
...
Рейтинг: 0 / 0
30.01.2013, 14:42
    #38130688
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
LameUser,

ну можно и Thread, в случае с BW про потоки знать не обязательно. с другой стороны лишних знаний не бывает.
...
Рейтинг: 0 / 0
30.01.2013, 17:59
    #38131165
maximIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
даже если я воспользуюсь BackgroundWorker то не получить фокуса на форму с прогрессом. и даже не увидеть что происходит на ней. единственный выход Application.DoEvents() ?
...
Рейтинг: 0 / 0
30.01.2013, 18:06
    #38131178
вопросец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
автор в соседней теме почитайте
...
Рейтинг: 0 / 0
31.01.2013, 06:24
    #38131662
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
maximIZдаже если я воспользуюсь BackgroundWorker то не получить фокуса на форму с прогрессом. и даже не увидеть что происходит на ней. единственный выход Application.DoEvents() ?

ShowDialog() формы с прогресс баром вместо Show() не пробовали (в случае запуска отдельного потока на цикл)?
...
Рейтинг: 0 / 0
31.01.2013, 11:49
    #38131983
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
maximIZ,

не понимаю что вы сделать -то хотите? Обычно так - нажимаете кноку на форме, на ней же progressbar. Сама логика выполняется в БГ потоке, а он передает через метод что-то там оповестить данные на прогрессбар.
...
Рейтинг: 0 / 0
31.01.2013, 13:09
    #38132183
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar
maximIZ, берём готовое решение, например: A .NET Progress Dialog , - и делаем по аналогии.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]