-4
我有一個需要10-15秒才能加載的UI。所以實現後臺線程(BG Thread)來加載數據。 當BG線程獲取數據時,主線程開始執行代碼的其餘部分,這就是問題開始的地方。主線程嘗試訪問尚未填充的數據後臺線程
當步驟如下1,由BG只主題...主線程試圖執行步驟2
如何確保直到我從後臺線程記錄(步驟1),第2步是執行沒有執行?
所以,這裏是得到執行步驟..
===========This piece is executed only by BG Thread===============================================
Step 1. Get data from DB
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
My DB call goes here... and populates productCollection used in step 2 below
}).Start();
==========================================================
Step 2.
if(productCollection?.Count > 0) // This collection is always 0 becuase BG Thread (step 1) has not yet populated the collection and user get "No record message"
{
// Filter collection based on some criteria
// assign the filtered collection to datagrid
dgProducts.DataSource = productCollection;
}
else
{
// show message to user that "No records found for given criteria";
}
爲什麼不使用'async' /'await'? – johnnyRose
在異步/等待的情況下,加載數據的時間相同,但沒有變化。我曾嘗試使用下面的示例異步/等待。 http://www.c-sharpcorner.com/article/async-and-await-in-c-sharp/ – Amit
這就是異步/等待的整點。除非可以同時進行多個調用,否則最終會等待相同的時間(_especially_如果它現在需要15秒!),但使用異步意味着編譯器會爲您管理它。所以你不必擔心強行創建新線程。但真正的價值在於知道數據何時完成加載,就像您的問題所要求的一樣; 「等待」爲你做。 – johnnyRose