Форма ожидания C # на панели

У меня 3 формы. Имена: MainScreen, ЗагрузкаForm, MoviesInfo. Когда я нажимаю кнопку на MainScreen, он выполняет некоторые работы, и LoadingForm загружается внутри панели MainScreen. Я хочу сделать, когда это будет сделано, показать форму MoviesInfo на той же панели на MainScreen или панели на LoadForm , Как я могу это сделать? Я добавляю формы на панели.

public static void AddFormToPanel(Form frm, Panel panel)
        {
            frm.TopLevel = false;
            panel.Controls.Add(frm);
            frm.Show();
            frm.Dock = DockStyle.Fill;
            frm.BringToFront();
        }

//Loading Form
public partial class LoadingForm : Form
    {
        public Action Worker { get; set; }
        public LoadingForm(Action worker)
        {
            InitializeComponent();
            if (worker == null)
            {
                throw new ArgumentNullException();

            }
            Worker = worker;

        }
        private void btnCancel_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            Task.Factory.StartNew(Worker)
                .ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
        }


    }

Форма MainScreen

    private void MovieOnButtonClick(object sender, EventArgs eventArgs)
            {


  using (loading = new LoadingForm(getMovieData))
        {
            loading.ShowDialog(this);
        }

       AddFormToPanel(moviesInfo, panelMain);


            }

Я не хочу, чтобы эта строка загружалась.ShowDialog (это); Я хочу добавить форму загрузки внутри панели.

c#,async-await,load,panel,wait,

-1

Ответов: 1


0 принят

Переместите действие и элемент управления в MainForm:

private async void MovieOnButtonClick(object sender, EventArgs eventArgs)
{
    var loadingForm = new LoadingForm();    // create a dummy loadingForm
    AddFormToPanel(loadingForm, panelMain);  

    var work = Task.Factory.StartNew(Worker);   // Worker = GetMovies or so
    await work;

    AddFormToPanel(moviesInfo, panelMain);    
    loadingForm.Dispose();
}

Удалите всю логику и события из модуля загрузки.

И лучше использовать UserControl, чем Forms для размещения на этой панели.

C #, асинхронному Await, нагрузки, панель, подождите,
Похожие вопросы