async Task loadAndParse(IExtractor extractor) { // progress tracker var updater = new Progress <ExtractorProgress>(); updater.ProgressChanged += (sender, evt) => { InvokeOnMainThread(() => { label.StringValue = evt.Message; }); }; // task Dictionary <String, Session> sessions = extractor.GetSessions(updater); var data = extractor.SerialiseToJson(updater, sessions); InvokeOnMainThread(() => { Results.RichText = false; var ts = new NSTextStorage(data); Results.LayoutManager.ReplaceTextStorage(ts); reflectState(State.LOADED); label.StringValue = "Done."; }); }