@Devagleo
Системный администратор

Можно ли в Windows Form разместить один элемент в собственном потоке?

Есть обычная форма с текстбоксами и кнопками, когда форма производит вычисления в углу становиться видимым элемент анимации, но из-за вычислений анимация тормозит и дергается. Можно ли создать элемент управления с анимацией в собственном потоке, чтобы вычисления основной формы не тормозили анимацию?
Попытался создать анимацию в потоке, создалась, но приклеилась всё равно к основной форме и живет в ней.
public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Thread threadLoadImage = new Thread(new ThreadStart(this.ThreadLoadingImage));
            threadLoadImage.Start();

        }
        private void ThreadLoadingImage()
        {
            PictureBox LoadingImage2 = new PictureBox
            {
                Anchor = System.Windows.Forms.AnchorStyles.Bottom,
                BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom,
                Cursor = System.Windows.Forms.Cursors.WaitCursor,
                Image = Resources.progressbar_cat,
                Location = new System.Drawing.Point(0, 22),
                Name = "LoadingImage2",
                Size = new System.Drawing.Size(1165, 154),
                SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom,
                TabStop = false,
                Visible = true,
                BackColor = Color.Transparent,
            };
            Invoke((MethodInvoker)(() => this.Controls.Add(LoadingImage2)));
        }

P.S. Application.DoEvents() не помогает.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
@chibitko
Весь UI обрабатывается в UI-потоке, сложные вычисления нужно выносить в BackgroundWorker https://docs.microsoft.com/ru-ru/dotnet/api/system...

либо async/await + SynchronizationContext.Current.Post

т.е. нужно выносить не анимацию, а вычисления
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Вычисления отдельно, анимация отдельно.
1. Показали контрол с анимацией в UI потоке
2. Запустили поток с вычислениями.
3. Вычисления завершились, сообщили в UI поток.
4. Скрыли/удалили анимацию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы