装载时呈灰色

时间:2018-02-13 15:59:35

标签: c# forms c#-4.0

我在c#中编写了以下代码。但它不是我想要的方式...... 我当前的代码打开“LoadingForm”,但当它在屏幕上显示时,我可以将其视为“灰色屏幕与方块” - 而不是我已添加到该表单的Loading_Gif,希望你帮助我(顺便说一下,我试过运行代码的第一部分抛出一个线程,它工作正常,但我无法关闭该LoadingForm,因为我不能从一个不同的线程关闭它,而不是我打开它,如果我尝试打开和关闭它在同一个线程中同时发生!) 这是我的代码, 注意:当movies.usingApi完成后,我的表单会恢复正常工作

private void RefreshButton_Click(object sender, EventArgs e)
{
    LoadingForm l1 = new LoadingForm();//a form that shows loading gif while 
    working in the background
    L1.Show();
    Movies.UsingApi();//calling a function to add all available movies to DB
    L1.Close();
}

这是我使用Threads的代码,

private void LoadMTV()
{
    Movies.UsingApi();}
    private void ShowLoading()
    {
           L1.ShowDialog();
    }

    private void RefreshButton_Click(object sender, EventArgs e)
    {
        System.Threading.Thread myThread;
        myThread = new System.Threading.Thread(new 
        System.Threading.[enter image description here][1]ThreadStart(LoadMTV));
        System.Threading.Thread myThread1;
        myThread1 = new System.Threading.Thread(new 
        System.Threading.ThreadStart(ShowLoading));
        myThread1.Start();
        myThread.Start(); 
    }
}

1 个答案:

答案 0 :(得分:0)

  

从一个以外的线程调用控件是不安全的   在不使用Invoke方法的情况下创建了控件。使线程安全   调用Windows窗体控件查询控件的InvokeRequired   属性。

     

如果InvokeRequired返回true,则使用委托制作调用Invoke   对控件的实际调用。

     

如果InvokeRequired返回false,则直接调用控件。

https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls