You can't. UI operations must be performed on the owning thread. Period.
What you could do, is create all those items on a child thread, then call Control.Invoke and do your databinding there.
Or use a BackgroundWorker
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += (s, e) => { /* create items */ };
    bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ };
    bw.RunWorkerAsync();
    When you access the from's property from another thread, this exception is thrown. To work around this problem there's at least 2 options.
Telling Control to don't throw these exceptions (which is not recommended):
Control.CheckForIllegalCrossThreadCalls = false;
Using threadsafe functions:
private void ThreadSafeFunction(int intVal, bool boolVal)
{
    if (this.InvokeRequired)
    {
        this.Invoke(
            new MethodInvoker(
            delegate() { ThreadSafeFunction(intVal, boolVal); }));
    }
    else
    {
        //use intval and boolval
    }
}   
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With