Потоки в WinForm - C#

Узнай цену своей работы

Формулировка задачи:

Ребята, подскажите пожалуйста Имеем 3 класса: 1 Класс - Program, который содержит метод Main в нём создаются 2 объекта: Presenter - класс управления и объект gameForm - соответственно унаследованный от Form
using System;
using System.Windows.Forms;
using Arachne3.Presenter;
using Arachne3.View;
 
namespace Arachne3
{
    class Program
    {
        public static int Main(string[] args)
        {
            ArachnePresenter presenter = new ArachnePresenter();
            GameWindow gameForm = new GameWindow(ArachnePresenter.Width,
                ArachnePresenter.Height,
                ArachnePresenter.Name);
            presenter.GetView(gameForm);
            presenter.Start(gameForm);
            return 0;
        }
    }
}
Собственно вопрос можно ли из Presenter запустить в отдельном потоке gameForm: Вот такой код вылетает с ошибкой. 2 класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Arachne3.View;
using System.Threading;
using System.Windows.Forms;
 
namespace Arachne3.Presenter
{
    class ArachnePresenter
    {
        public static int Width, Height;
        public static string Name;
 
        private IView _view;
         private bool running;
 
        public ArachnePresenter()
        {
            Width = 480;
            Height = 800;
            Name = "Untitled";
        }
 
        public void GetView(IView view)
        {
            _view = view;
        }
 
        public void Start(Form gameForm)
        {
            Thread GameThread = new Thread( new ThreadStart(ViewRun));
            GameThread.Start();
            _view.Render();
        }
 
        private void ViewRun()
        {
            Application.Run((Form)_view);
        }
И не замысловатый интерфейс:
using System;
using System.Drawing;
 
namespace Arachne3
{
    interface IView
    {
        void Render();
    }
}
InvalidOperationException. Недопустимая операция в нескольких потоках: попытка доступа к элементу управления '' не из того потока, в котором он был создан.

Решение задачи: «Потоки в WinForm»

textual
Листинг программы
using System;
 
namespace Project2
{
    interface IView
    {
        void Render();
        bool BeRender { get; set; }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5