powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / форма не доступна
13 сообщений из 13, страница 1 из 1
форма не доступна
    #39086499
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени господа форумчане!
Есть вопрос знатокам С# .
Приложение работает долго ... работа с базой ... расчеты и т.д. за это время главная форма уходит в "затенение" - форма недоступна
Как не допустить этого затенения ? В форме отображается стадии хода работ всей программы.


О сколько нам открытий чудных ....
...
Рейтинг: 0 / 0
форма не доступна
    #39086505
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
форма не доступна
    #39086517
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполнять расчеты не в UI-потоке, результаты расчетов выводить в UI-потоке
...
Рейтинг: 0 / 0
форма не доступна
    #39086593
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, мне тоже похожая мысль пришла в голову.
Однако как обновлять TextBox на форме из другого потока ?
...
Рейтинг: 0 / 0
форма не доступна
    #39086610
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069,

Код: c#
1.
2.
if (myTextBox.InvokeRequired)
   myTextBox.Invoke(....);
...
Рейтинг: 0 / 0
форма не доступна
    #39086720
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069Спасибо, мне тоже похожая мысль пришла в голову.
Однако как обновлять TextBox на форме из другого потока ?Статью лень почитать, или английский не понимаете?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
void m_oWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // This function fires on the UI thread so it's safe to edit
    // the UI control directly, no funny business with Control.Invoke :)
    // Update the progressBar with the integer supplied to us from the
    // ReportProgress() function.
    progressBar1.Value = e.ProgressPercentage;
    lblStatus.Text = "Processing......" + progressBar1.Value.ToString() + "%";
} 
...
Рейтинг: 0 / 0
форма не доступна
    #39086747
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
lblStatus.Text = "Processing......" + progressBar1.Value.ToString() + "%";


согласен что так можно выводить состояние и процент выполнения ... Но мне нужно передавать из потока в форму не % выполнения а конкретные переменные которые имеют слегка другое содержание.
BackgroundWorker - хорош когда нужно всего лишь обновить конкретный bar и показать проценты выполнения.
Но основная задача состоит в том что бы вывести несколько переменных из потока на форму, а вот выводить произвольные переменные BackgroundWorker не умеет...
...
Рейтинг: 0 / 0
форма не доступна
    #39086764
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069
Код: c#
1.
lblStatus.Text = "Processing......" + progressBar1.Value.ToString() + "%";


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

а сделать переменные глобальными?
...
Рейтинг: 0 / 0
форма не доступна
    #39086773
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я попытался применить backgroundWorker, я в асинхронном методе запуска потока прописал мой метод который передавал в поток progressBar1 и textBox_Log по неопытности ....
И естественно поток не смог присвоить textBox_Log.Text значение рожденное в потоке ...
Так вот может быть есть альтернатива backgroundWorker который может передавать переменные из потока ?
Вот мой код который я по неопытности вкрутил в DoWork

private void backgroundWorkerConvert_DoWork(object sender, DoWorkEventArgs e)
{
conf.Migration(PathBasaAccess, progressBar1, null, textBox_Log);
}
...
Рейтинг: 0 / 0
форма не доступна
    #39086782
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex171069
Код: c#
1.
lblStatus.Text = "Processing......" + progressBar1.Value.ToString() + "%";


согласен что так можно выводить состояние и процент выполнения ... Но мне нужно передавать из потока в форму не % выполнения а конкретные переменные которые имеют слегка другое содержание.
BackgroundWorker - хорош когда нужно всего лишь обновить конкретный bar и показать проценты выполнения.
Но основная задача состоит в том что бы вывести несколько переменных из потока на форму, а вот выводить произвольные переменные BackgroundWorker не умеет...Я в таких случаях создаю класс, например: ExecutionState, - содержащий необходимую информацию о ходе выполнения.
И передаю экземпляр этого класса между потоками.
...
Рейтинг: 0 / 0
форма не доступна
    #39086800
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, а экземпляры класса как передаете ?
И потом со стороны формы как понять что экземпляр класса обновился ?
...
Рейтинг: 0 / 0
форма не доступна
    #39086821
alex171069
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и этот класс должен быть статическим или реализовать паттерн "одиночка" .
...
Рейтинг: 0 / 0
форма не доступна
    #39086921
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

автор походу так и не читал ваши ссылки :) и даже не пытался вникнуть.
пытается передавать из 1 поток данные в другой, даже не представляя, что память у них "общая"
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / форма не доступна
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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