You can not access Windows UI components from a thread that did not create it (as the error states).
The solution is to use a delegate to get back to the UI thread or use the Progress update or complete event. I recommend the last one for you case as it seems you are done with the worker thread.
Updating progress is more for long running process that you want feedback (i.e. progress bar). Using a delegate is necessary in some cases but this is not one of them.
Here is how you use the Progress change event and/or the completion event (you should use the completion event and put the "SalesReport" code there)
BackgroundWorker worker = new BackgroundWorker();
worker.ProgressChanged += worker_ProgressChanged;
worker.WorkerReportsProgress = true;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
...
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
throw new NotImplementedException();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
throw new NotImplementedException();
}