簡體   English   中英

圖片盒打開太晚

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM