run event listener as a background thread