等待面板上的C#表格

时间:2018-06-24 08:47:48

标签: c# async-await load panel wait

我有3种形式。名称:MainScreen,LoadingForm,MoviesInfo。 当我按下MainScreen上的按钮时,它正在做一些工作,并且LoadingForm正在加载到MainScreen的面板内。我想在完成工作后在MainScreen的同一面板上或LoadingForm的面板上显示MoviesInfo Form 。我怎样才能做到这一点? 我像这样在面板上添加表格。

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);


            }

我不希望此行加载。我想在面板内添加加载表单。

1 个答案:

答案 0 :(得分: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();
}

从LoadingForm中删除所有逻辑和事件。

使用UserControl比将Form放置在面板中更好。