[英]C# file handles released too late when opening files on a remote host (via symlink)
[英]picturebox opening too late
我想通過從網上獲取內容來顯示“正在加載..,請稍候”的gif圖片。 我嘗試了以下代碼,但是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 ..
}
我該如何解決這個問題? 任何幫助,將不勝感激。
不能完全確定您要在此處執行的操作,但是可能要實現async
/ await
模式。
將您的按鈕標記為async
private async void buttonStart_Click(object sender, EventArgs e)
對於您需要等待的任何內容,都應await
它,它將使您的表單重新繪制,因此不會凍結。 例如,類似:
await Task.Run(() => loadPictureBox());
或者,您可以通過給它一個async Task
的簽名來使loadpicturebox方法異步。
您可能遇到的問題是,在退出click方法之前,表單不會更新或刷新自身。 這意味着,如果您首先使其顯示正在加載的圖像,然后以與表單將凍結的相同方法加載下一個圖像,直到兩個操作均已完成並且該方法已退出。
async
await
模式意味着在執行某些處理或其他操作時,讓Windows繼續繪制表單並處理表單上的動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.