powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Индикация хода выполнения Update
23 сообщений из 23, страница 1 из 1
Индикация хода выполнения Update
    #38414263
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем. Я понимаю, что вопрос избитый, но....
Имеем WinForms приложение и MSSQL.

Каким образом отображать ход выполнения Update? Не обязательно точно, но хоть как-то, типа анимация какая-то, или бесконечный прогресс бар? Какие мысли есть?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38414335
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое - BackgroundWorker
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415658
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никогда не сталкивался с этим компонентом, но посмотрел, вроде всё ясно. Только не понятно, как его прикрутить, если в программе в разных местах выполняются Fill, Update, и для каждой операции надо предусмотреть показ выполнения? Поясните, если не тяжело, плз, кратко...
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415686
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaitCursor?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415723
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так он и так переводится в true.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
            {
                Validate();
                registerBindingSource.EndEdit();
                registerTableAdapter.Update(researchDataSet.Register);
                MessageBox.Show("Update OK");
            }
            catch (Exception)
            {

                MessageBox.Show("Update failed");
            }



Вот как пример, перед вызовом Update показать окно типа "Пожалуста подождите", модальное, а после его закрыть, только я не понимаю, как это сделать? Каждый раз заново создавать окно? И как его закрыть программно?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415790
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kuks,
Проктолог?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415800
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну типа того, пытаюсь создать нужное мне окно ожидания....
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415802
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kuks,
после того как адептер обновится?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415806
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да, после обновления закрыть это окно ожидания....
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415815
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KuksТолько не понятно, как его прикрутить, если в программе в разных местах выполняются Fill, Update, и для каждой операции надо предусмотреть показ выполнения?

Сделать процедуру-обертку для выполнения Fill-Update - ей подавать адаптер с датасетом, а она уже пусть делает асинхронное выполнение с показом messageboxoв или чего ты там хочешь.
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415832
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да мне не надо потоков, асинхронных выполнений и т.д. Задача простейшая - открыть окно в модальном режиме, после Update его закрыть программно....
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415839
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kuks,

лови момент:
update обходит все записи и индивидуально обновляет в базе.
количество записей ты можешь высчитать равно и как пощупать и естественно обновить индивидуально каждую
отдельно, можно организовать такую шузу с баром, хоть в процентах хоть в абсолютных величинах, можно разложить их по типу акции, конкуренты умрут от зависти...
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415845
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
обязательно нужно сделать задержку, а то окно пыхнет на пару сек. и пользователь не прочувствует кайфа
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415849
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я понял, спасибо за сарказм...
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38415860
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kuks, какой сарказм, я такую шузу видел , могучая вещь, если ее натянуть на окно смерти - сразу выводит юзера из полусонного состояния, ну как окно сделать я надеюсь ты знаешь Form form=new Form() form.Show() ну и как закрыть то же form.Close()
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38416291
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да всё понятно с окном, просто видел на форуме окно ожидания готовое, не могу найти....
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38416818
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел я пример на форуме, написал класса окна ожидания...
Код: c#
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.
class WaitForm: Form
    {
        public WaitForm() 
        {
            FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
            StartPosition = FormStartPosition.CenterParent;
            BackColor = SystemColors.ControlDark;
            Text = "Идет обновление данных на сервере, пожалуйста подождите......";
            ControlBox = false;
            Width = 400;
            Height = 100; 
        }
        public event EventHandler DoAction;
        protected virtual void OnDoAction(EventArgs e)
        {
            if (DoAction != null)
                DoAction(this, e);
        }
        private Exception m_ProcException = null;

        private void CloseDialog()
        {
            DialogResult = DialogResult.OK;
        }

        private void ThreadProc(object stateInfo)
        {
            m_ProcException = null;
            try
            {
                OnDoAction(EventArgs.Empty);
            }
            catch (Exception E)
            {
                m_ProcException = E;
            }
            BeginInvoke(new NoParamsDelegate(CloseDialog));
        }

        protected override void OnShown(EventArgs e)
        {
            base.OnShown(e);
            ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
        }

        public new DialogResult ShowDialog()
        {
            DialogResult r = base.ShowDialog();
            if (m_ProcException != null)
                throw m_ProcException;
            return r;
        }
    }
    public delegate void NoParamsDelegate();
}



Что-то я не могу никак понять, как с ним работать.... Не пинайте сильно
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38417057
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень удачную реализацию вы взяли.

Вот, лучше изучите этот пример: ProgressForm: A simple form linked to a BackgroundWorker
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38418820
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен, изучил пример, но я пока не понимаю, как грамотно прикрутить его к моей ситуации...

Код: c#
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.
 private void Update_toolStripButton_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowState drState = DataRowState.Unchanged;
                Validate();
                Reg_bindingSource.EndEdit();
                if (Reg_bindingSource.Current != null)
                {
                    DataRow FindRow = (Reg_bindingSource.Current as DataRowView).Row;
                    drState = FindRow.RowState;
                    Reg_TableAdapter.Update(Reg_DataSet.Register);
                    if (drState == DataRowState.Added)
                    {
                        Reg_TableAdapter.FillByScript(Reg_DataSet.Register, scriptTextBox.Text.ToString());
                    }
                    else
                    {
                        Reg_bindingSource.Position = Reg_bindingSource.Find("Script", scriptTextBox.Text.ToString());
                    }
                    MessageBox.Show(" Запись в базе данных обновлена успешно ", " Research ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Add_toolStripButton.Enabled = true;
                    if (!Admin_Rights)
                    {
                        Update_toolStripButton.Enabled = false;
                    }
                    ReloadMarkers();
                }
                else
                {
                    MessageBox.Show(" Набор данных пуст. ", " Research ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Add_toolStripButton.Enabled = true;
                    if (!Admin_Rights)
                    {
                        Update_toolStripButton.Enabled = false;
                    } 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format(" Не удалось обновить запись в базе данных - Ошибка - {0} ", ex.Message.ToString()), " Research ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }



Вот, например, в этом участrе кода выполняется Update, что мне передать выполнение этого участка кода в обработчик события?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38420527
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните тупому, как разные запросы к БД, вызываемые разными методами TableAdapter (Fill, Update (с разными аргументами)) передать в поток BW? Вот не пойму, хоть убейте, что для всех методов писать отдельные окна ожидания? Подскажите, плз.

Сделал вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void wf_DoWork(WaitForm sender, DoWorkEventArgs e)
        {
            bool throwException = (bool)e.Argument;
            try
            {
                resTableAdapter.Update(researchDataSet.Register);
            }
            catch (Exception Ex)
            {
                throw new Exception(Ex.Message);
            }
        }



Но это только один из нескольких апдейтов....
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38420528
Syrex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может записать в лист весь список адаптеров?
Потом в потоке обращаться к данному списку?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38420544
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, адаптер один. Я про то, что например для поиска, используется TableUdapter.Fill с разными параметрами, которые берутся из TextBox-ов. Как их передавать в поток?
...
Рейтинг: 0 / 0
Индикация хода выполнения Update
    #38421257
Kuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, сделал. Сам дурак и дурацкими вопросами задолбал всех.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Индикация хода выполнения Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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