Norms, rules or guidelines for calculating and showing ETA/ETC for a process
Your approach looks reasonable if one makes the assumption that the average time for item processing is roughly the same for each item. 

Updating the UI once a second is ok, updating it more often does not make much sense since the typically user cannot follow that visually either. If this really becomes a bottleneck, you might consider to add some code like

if(timeWhenUIWasUpdated &lt; currentTime-1.0)
{
    this.Text = String.Format(/*...*/);
    timeWhenUIWasUpdated = currentTime; // unit: seconds
}


(you will have to introduce those two variables timeWhenUIWasUpdated and currentTime into your code).

Of course, when your progress event gets called more often (for example, several 10,000s a second), you will have to think about further optimizations, since even without the UI you will have to do some time value management or calculations. But as long as this is not the case, keep things simple.

This one here

if (avrage.Count &gt; 30) 
     avrage.RemoveRange(0, 10);


looks like premature optimization, I guess

     avrage.RemoveRange(0, 1);


will give you a more smooth behaviour (and I guess you won't notice the difference in running time in most real-world cases). 

Furthermore, for testing purposes, you may consider to refactor the average-time calculation into a SlidingAverageCalculator class, separating the logic fully from the background worker and the UI display. This will make it really easy to write unit tests for that part of the code.