This sounds like a perfect situation for using Microsoft's Reactive Extensions (NuGet "Rx-WinForms").
Your code would look something like this:
var query =
from item in this.lstbxItems.Items.ToObservable()
from result in Observable.Start(() => ProcessItem(item))
select new { item, result };
IDisposable subscription =
query
.ObserveOn(this) /* marshals to UI-thread */
.Subscribe(x =>
{
/* do something with each `x.item` & `x.result`
as soon as they are asyncronously computed */
});
If you needed to stop the computation before it completes naturally you can just call subscription.Dispose()
.