我在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();
}
}
答案 0 :(得分:0)
从一个以外的线程调用控件是不安全的 在不使用Invoke方法的情况下创建了控件。使线程安全 调用Windows窗体控件查询控件的InvokeRequired 属性。
如果InvokeRequired返回true,则使用委托制作调用Invoke 对控件的实际调用。
如果InvokeRequired返回false,则直接调用控件。