The following will undoubtedly need some tweaking, but it should be close:
int m_itemCounter = 0;
bool TopOfList { get { return m_itemCounter == 0); } }
bool EndOfList { get { return m_itemCounter >= listBox.Items.Count; } }
private List<string> GetNItems(int count)
{
List<string> results = new List<string>();
int stop = Math.Min(count, this.listBox.Items.Count - m_itemCounter);
for (int i = m_itemCounter; i < stop; i++)
{
results.Add(this.listBox.Items[i]);
}
m_itemCounter += stop;
return results;
}