Мне нужна помощь.Вопрос:
Как сделать фоновое выполнение операции в программе,но при этом программа должна быть активна,а не зависать..Желательно с прогресс баром.BackgroundWorker сразу говорю не то т.к. в нём можно выполнять тока операции не затрагивающие интерфейс(к примеру richtextBox)?
Как сделать фоновое выполнение операции в программе,но при этом программа должна быть активна,а не зависать..Желательно с прогресс баром.BackgroundWorker сразу говорю не то т.к. в нём можно выполнять тока операции не затрагивающие интерфейс(к примеру richtextBox)?
В нем как раз можно выполнять операции затрагивающие интерфейс....
Мне нужна помощь.Вопрос:
Как сделать фоновое выполнение операции в программе,но при этом программа должна быть активна,а не зависать..Желательно с прогресс баром.BackgroundWorker сразу говорю не то т.к. в нём можно выполнять тока операции не затрагивающие интерфейс(к примеру richtextBox)?
Код:
CheckForIllegalCrossThreadCalls = false;
и
Код:
new Thread(...).Start();
Тебе в помощь.
Насчёт прогресс бара не уверен, но если это чекер или парсер то можно высчитать 100% из общего количества и высчитать процент выполненного.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
Ну начну с самого банального, это потоконебезопасно. Если отключить данное свойство то программа перестанет различать обращающиеся к форме потоки, следовательно фоновый поток может перебить результаты работы основного, и наоборот.
К примеру во время textbox.Text = "text", а именно между вызовом textbox.Text = "text" и самим методом set_Text может влезть "иной" поток и записать свое значение, тем самым мы просто потеряем значения "иного" потока после того как основной закончит свою работу.
Если включить данное свойство, то нам придется использовать делегаты, а следовательно программа сама будет выстраивать обращения потоков в очередь и обрабатывать их.
Вопрос остаётся открытым.Дай те пожалуйста ответ,желательно с примером.
Да как бы msdn имеет ответы на все вопросы...
[Ссылки могут видеть только зарегистрированные пользователи. ]
1й же пример, обрати внимание на : .ReportProgress();
Ну начну с самого банального, это потоконебезопасно. Если отключить данное свойство то программа перестанет различать обращающиеся к форме потоки, следовательно фоновый поток может перебить результаты работы основного, и наоборот.
К примеру во время textbox.Text = "text", а именно между вызовом textbox.Text = "text" и самим методом set_Text может влезть "иной" поток и записать свое значение, тем самым мы просто потеряем значения "иного" потока после того как основной закончит свою работу.
Если включить данное свойство, то нам придется использовать делегаты, а следовательно программа сама будет выстраивать обращения потоков в очередь и обрабатывать их.
Раньше тоже использовал делегаты, но сколько уже писалось кода с данным отключенным свойством, ничего не случалось.
С другой стороны, если есть функция, которая собирает данные с потоков а потом красивенько отображает в том же рич боксе, то данное отключенное свойство отрицательных результатов не вызовет.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
С другой стороны, если есть функция, которая собирает данные с потоков а потом красивенько отображает в том же рич боксе, то данное отключенное свойство отрицательных результатов не вызовет.
Эта функция идеально подходит что бы повесить ее на .ReportProgress(); в бекграунд воркере.... и без ущерба в безопасности...
Не буду больше спорить о сферическом коне в вакууме, этот дискас напоминает разговор о том, нужно ли использовать lock/semaphore/monitor/waithandle.делегаты/etc. Ответ один - нужно, C# - объектно ориентированный язык программирования, здесь нужно соблюдать определенные правила