Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552

Не работает Gif в потоке

17.04.2020, 11:40. Показов 3690. Ответов 30

Студворк — интернет-сервис помощи студентам
Всем привет.Есть код,который вычисляет факториал больших чисел.При вводе большого числа,например 100000,первую минуту все работает нормально,а потом все замирает и создается впечатление,что прога зависла.Но она не зависает и вычисление продолжается.Вопрос в том,как избавится от этого ложного зависания,то есть что бы гифка продолжала работать.
Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
Imports System.Numerics
Public Class Form1
    Dim Nam1, Nam3 As BigInteger
    Dim s As New Stopwatch
    Dim th As System.Threading.Thread
 
    Sub Fakt()
        Try
            s.Start()
           Nam1 = BigInteger.Parse(TextBox1.Text)
            Nam3 = 1
            ' Och()
            For i = 1 To Nam1
                Nam3 = Nam3 * i
                Invoke(Sub() Label4.Text = s.Elapsed.ToString.Split(".")(0))
            Next
            Invoke(Sub() TextBox3.Text = (Nam1.ToString & vbNewLine & "!" & vbNewLine & Nam3.ToString))
            Invoke(Sub() Label3.Text = Len(Nam3.ToString))
            Invoke(Sub() Label4.Text = "Затрачено " & s.Elapsed.ToString.Split(".")(0))
            Invoke(Sub() PictureBox1.Image = Nothing)
            s.Reset()
            GC.Collect()
            th.Abort()
       Catch ex As Exception
      End Try
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            TextBox3.Text = ""
            s.Start()
            Nam1 = BigInteger.Parse(TextBox1.Text)
            Nam3 = 1
            '  Och()
            PictureBox1.Image = My.Resources.anim_load
            ' If Len(Nam1.ToString) > 4 Then
            th = New System.Threading.Thread(AddressOf Fakt)
            th.Start()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2020, 11:40
Ответы с готовыми решениями:

Воспроизведение GIF в параллельном потоке
Есть окно, информирующее пользователя о том что идет обработка данных. Поместил на форму GIF-картинку с часами. Как сделать, чтобы...

Не работает GIF
не работает GIF(показывает только первый кадр) при запуске через стандартную программу просмотра картинок или через Picture Manager..однако...

Анимированный gif не работает в C++ 2010
Всем привет, у меня RAD Studio C++ 2010, ставлю комопнент Image туда запихиваю файл gif, но когда запускаю прокт GIF отображается как...

30
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
18.04.2020, 19:50
Студворк — интернет-сервис помощи студентам
Ну вообще-то Stream абстрактный класс. Можно попробовать реализовать передачу итоговой величины из потока в контрол основной формы используя асинхронные методы этого класса. В контроле это будет выглядеть как будто данные поступают пачками. Время передачи может и не уменьшится, но зато будет наглядно видно, что что-то происходит.

Добавлено через 16 минут
По сути будет тоже самое что и в варианте Orlangur, но без записи в файл.
0
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
19.04.2020, 06:15  [ТС]
Uswer, Вы можете дать пример кода? Я не совсем понял как этот Stream работает.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
19.04.2020, 09:04
Тим70, Uswer, интересное наблюдение, если выносить текст в RichTextBox, а не в обычный TextBox, то зависания не происходит
VB.NET
1
2
3
  Dim R As MyFactorial = Await Task.Run(Function() Fa(BigInteger.Parse(TextBox1.Text)))
            RichTextBox1.AppendText(r.RString)
            Label3.Text = "Длинна: " & R.RSLength
По крайней мере, у меня при высчитывании факториала 150000 ничего не зависло, а это 711к знаков
2
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
19.04.2020, 11:10  [ТС]
Orlangur, У меня к сожалению не работает Async Function,но запись результата в RichTextBox занимает столько же времени как и в файл.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
19.04.2020, 14:34
Тим70, ну это же явно быстрее, чем в textbox

Нашел интересный метод расширения, позволяет конвертировать BigInteger в строку немного быстрее, нежели метот .ToString
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <System.Runtime.CompilerServices.Extension>
    Public Function ToDecimalString(ByVal value As BigInteger) As String
        If value = 0 Then
            Return "0"
        End If
        Dim digits = 10000
        Dim divider = BigInteger.Pow(10, digits)
        Dim parts = New Stack(Of String)()
        Do
            Dim remainder As BigInteger = Nothing
            value = BigInteger.DivRem(value, divider, remainder)
            If value <> 0 Then
                parts.Push(BigInteger.Abs(remainder).ToString().PadLeft(digits, "0"c))
            Else
                parts.Push(remainder.ToString())
                Exit Do
            End If
        Loop
        Return String.Join("", parts)
    End Function
1
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
19.04.2020, 15:36  [ТС]
Orlangur, Конечно быстрее! На вывод 200000 в TextBox у меня ушла 41 мин,а на RTB и txt см. миниатюры.
Там приличный разброс времени между выводом результата и завершение работы проги, но это скорее всего из за того,что у меня слабый комп.Ваше предложение попробую позже,сейчас времени нет.
Миниатюры
Не работает Gif в потоке   Не работает Gif в потоке  
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
19.04.2020, 17:46
Uswer, дело в том что я увидел про зависания, поэтому и предложил.

Добавлено через 9 минут
Цитата Сообщение от Uswer Посмотреть сообщение
Положительный, прежде чем рекомендовать применение DoEvents Вы бы ознакомились со всеми ответами в теме. Длительные вычисления выполняются в отдельном потоке, да и основная проблема не в самих вычислениях.
Тим70, а что если вместо записи в файл использовать Stream?
Я ж вроде говорил, что по поиску не нашел DoEvents() здесь в теме.
Я настроен был дать максимальный вариант в теме.
Ну, не нашли вы максимальный вариант - фиг с ним, - " Ко мне какие предъявы?"
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
19.04.2020, 21:25
Тим70, 41 минуту? Ну не знаю, у меня на моём стареньком Intel G860 200к считается за 1 минуту, видимо где-то ещё косяк есть
0
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
20.04.2020, 19:46  [ТС]
Orlangur, Мой комп в миниатюре.Проверил свой код на win xp,результат практически такой же. Посмотрите,пожалуйста мой код,может я где то напортачил...
Миниатюры
Не работает Gif в потоке  
Вложения
Тип файла: rar Большой факториал.rar (480.4 Кб, 1 просмотров)
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.04.2020, 22:25
Лучший ответ Сообщение было отмечено Тим70 как решение

Решение

Тим70, немного подправил, потому что у вас опять идет конвертация в строку в invoke методах, что вызовет тормоза
Ну и целевой cpu значительно влияет на скорость вычислений

Вложения
Тип файла: zip Большой факториал.zip (38.5 Кб, 5 просмотров)
1
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
21.04.2020, 06:49  [ТС]
Orlangur, Большое спасибо.Совсем другое дело.Только вы не подправили,а практически переделали весь код.
Миниатюры
Не работает Gif в потоке  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2020, 06:49

Не работает gif-анимация на форме
Добрый день. Как правильно добавить анимацию на форму чтобы она работала. Пробовал добавлять как картинку, но не получилось анимация не...

Не работает анимация GIF в background image
Балуюсь с Windows Form в конструкторе Visual Studio... Захотелось сделать анимированый фон. BackgroundImage принимает гифку, но при запуске...

Не работает зацикливание gif [D10.1 Berlin]
Добрый день, делаю программную сборку gif анимации, сама картинка собирается и проигрывается всего 1 раз (нужно циклично), есть флаг...

Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации
Всем привет.. задача такая: Необходимо открыть файл GIF.. Например, как в этой статье про декодирование.. ...

Не работает цикл в потоке
Вот писал программу,в ней цикл,достаточно длинный поэтому форма зависала,если просто процедуру в основной поток заносить,пришлось...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru