you can use a blocking queue. taking an item from the blocking queue will block the thread until the item is queued. which does not require any processor.
with .net4, you can use BlockingCollection http://msdn.microsoft.com/en-us/library/dd267312.aspx
in version 4, the int.net framework queue is not blocked.
You can find many queue blocking tools if you google it.
here is the implementation
http://www.codeproject.com/KB/recipes/boundedblockingqueue.aspx
By the way
. where do the data you expect come from?
EDIT
if you want to check the file. you can use FileSystemWatcher to check it with a stream block.
if your data comes from an external API and the api does not block the thread, it is impossible to block the thread except using Thread.Sleep
source share