我想通过从网上获取内容来显示“正在加载..,请稍候”。 我尝试了以下代码,但Picturebox打开太晚了。
private void buttonStart_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
webSatList = new WebSatelliteList(this, XMLSatList, name);
webSatList.LoadTPList();
TPListToBeAdded = webSatList.GetTPListToBeAdded();
TPListToBeRemoved = webSatList.GetTPListToBeRemoved();
drawTPListGridView(TPListToBeAdded, TPListToBeRemoved);
}
public void drawTPListGridView(List<TPInfo> TPListToBeAdded, List<TPInfo> TPListToBeRemoved)
{
pictureBox1.Visible = false;
//draw TP List ..
}
Picturebox在此行之后开放:
“TPListToBeRemoved = webSatList.GetTPListToBeRemoved();”
我试图通过使用backgroundworker(以下代码)解决此问题,并且已经看到了同样的问题。另外,我使用弹出窗体而不是PictureBox没有任何改变。
private void buttonStart_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
webSatList = new WebSatelliteList(this, XMLSatList, name);
webSatList.LoadTPList();
TPListToBeAdded = webSatList.GetTPListToBeAdded();
TPListToBeRemoved = webSatList.GetTPListToBeRemoved();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
drawTPListGridView(TPListToBeAdded, TPListToBeRemoved);
}
public void drawTPListGridView(List<TPInfo> TPListToBeAdded, List<TPInfo> TPListToBeRemoved)
{
pictureBox1.Visible = false;
//draw TP List ..
}
我该如何解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:0)
完全确定您在此处尝试做什么,但您可能希望实施async
/ await
模式。
将按钮标记为async
private async void buttonStart_Click(object sender, EventArgs e)
对于您需要等待的任何内容,应该await
并且它会重新绘制您的表单,因此它不会冻结。例如,像:
await Task.Run(() => loadPictureBox());
或者您可以通过为其设置async Task
的签名来使您的loadpicturebox方法异步。
您可能遇到的问题是,在点击方法退出之前,表单不会更新或刷新。这意味着如果您首先使其显示加载图像,然后在相同方法中加载下一个图像,表单将冻结,直到两个操作都完成并且方法已退出。
async
await
模式意味着在进行某些处理或其他任何操作时,让窗口继续绘制表格并对其进行处理。