在我的應用程序的圖像預加載緩存,還有通過它,用戶可以一步圖像列表。圖像加載速度很慢,因此爲了改善用戶體驗,我希望在背景中預加載一些圖像(例如,列表中的圖像在當前選定的圖像之後)。C# - 如何實現與線程
我從來沒有真正使用的線程在C#,所以我要尋找某種「最佳實踐」的建議如何實現以下行爲:
public Image LoadCachedImage(string path)
{
// check if the cache (being operated in the background)
// has preloaded the image
Image result = TryGetFromCache(path);
if (result == null) { result = LoadSynchronously(path); }
// somehow get a list of images that should be preloaded,
// e.g. the successors in the list
string[] candidates = GetCandidates(path);
// trigger loading of "candidates" in the background, so they will
// be in the cache when queried later
EnqueueForPreloading(candidates);
return result;
}
我相信,一個後臺線程應該是監控隊列,並連續處理通過EnqueueForPreloading()發佈的元素。我想知道如何實現後臺工作線程的這個「主循環」(或者也許有更好的方法來做到這一點?)
BeginInvoke不會對「在不同的線程上」做任何事情。相反,它讓你在UI線程上專門做一些事情。它基本上說「下一次UI線程不忙於做其他事情時,在UI線程上調用此方法」。當您的調用方法在UI線程上執行時,UI線程無法做其他事情 - 它看起來沒有反應。所以......你的第一個建議可以正常工作,但第二個建議不會。 – 2011-05-06 03:22:44