Этот небольшой полезный шаблонный хелпер позволяет автоматически запрещать и разрешать обновления компонентов, используя RAII идиому. Освобождение залоченного объекта произойдет даже при возникновении исключительной ситуации.

/// Templated update locker utility class
template <typename T>
class EsUpdateLocker
{
public:
	inline EsUpdateLocker( T* obj ) :
	m_obj(obj)
	{
		if( m_obj )
			m_obj->BeginUpdate();
	}

	void inline release()
	{
		if( m_obj )
		{
			m_obj->EndUpdate();
			m_obj = 0;
		}
	}

	inline ~EsUpdateLocker()
	{
		release();
	}

private:
	T* m_obj;
	EsUpdateLocker();
	EsUpdateLocker( const EsUpdateLocker& );
	EsUpdateLocker& operator=( const EsUpdateLocker& );
};

Использование:

void doSomething(TListBox* lbx)
{
  EsUpdateLocker<TListBox> lock(lbx);
  // do something with list box items
  // ...
}