private void ThreadQueryMarketPrices(Object a_ParamObj) { UpdateThreadParam a_Param = (UpdateThreadParam)a_ParamObj; for (; !m_EndUpdateThread;) { UInt32 blockSize = a_Param.PriceProvider.GetRequestBlockSize(); List <UInt32> queriedItems = new List <UInt32>(a_Param.UpdateQueue.Count); lock (a_Param.UpdateQueue) { if (0 == a_Param.UpdateQueue.Count) { return; } for (UInt32 i = 0; i < blockSize; i++) { if (0 == a_Param.UpdateQueue.Count) { break; } UInt32 currItem = a_Param.UpdateQueue.Dequeue(); queriedItems.Add(currItem); } } try { List <PriceRecord> newPrices = a_Param.PriceProvider.GetPrices(queriedItems); ApplyPrices(newPrices, a_Param.PriceProvider.GetCurrentFilter()); } catch (System.Exception a_Exception) { Debug.Assert(false, a_Exception.Message); System.Diagnostics.Debug.WriteLine(a_Exception.Message); // Return unqueried items back lock (a_Param.UpdateQueue) { foreach (UInt32 typeID in queriedItems) { a_Param.UpdateQueue.Enqueue(typeID); } } } } Debug.WriteLine(String.Format("ThreadQueryMarketPrices: Stopped updating prices")); }
private void TestMarketPrices(IPriceProvider a_PriceProvider, Settings.V2._PriceSettings a_Settings, bool a_Silent) { ItemFilter filter = new ItemFilter(); filter.HasMarketGroup = TristateFilter.Yes; filter.IsPricesOk = TristateFilter.No; filter.PriceExpiryDays = a_Settings.ExpiryDays; UInt32[] badItems = m_ItemsDB.FilterItems(filter); if (0 == badItems.Count()) { return; } if (!a_Silent) { if (DialogResult.Yes != MessageBox.Show("You have outdated market prices. Would you like to update them now?", Application.ProductName, MessageBoxButtons.YesNo)) { return; } } Queue <UInt32> pricesQueue = new Queue <UInt32>(); foreach (UInt32 currItem in badItems) { pricesQueue.Enqueue(currItem); } StopUpdaterThread(); UpdateThreadParam param = new UpdateThreadParam(); param.PriceProvider = a_PriceProvider; param.UpdateQueue = pricesQueue; ThreadWithParam paramThread = new ThreadWithParam(); paramThread.Function = ThreadQueryMarketPrices; paramThread.Parameter = param; m_EndUpdateThread = false; m_UpdateQueue = pricesQueue; m_UpdateThread = paramThread.CreateThread(); m_UpdateThread.IsBackground = true; m_UpdateThread.Start(); }