No because I write data in DoWork event.
Then, in your DoWork method, use the Control.Invoke or Control.BeginInvoke
method of any of your UI controls to marshall the call to the UI thread.
The only thing to take care about is that these methods will work properly
only if the control on which they are called has already created his
Handle, that is if it has already been shown on the screen or if you have
manually forced the creation of its Handle.
Alternatively, you can call BackgroundWorker.ReportProgress from your
DoWork method to report progress to your UI thread. This method takes an
object as a parameter which will be given to the UI thread in the
ProgressChanged event allowing the UI thread to access whatever data it
needs.