Исключение CrossThread для родительского элемента управления

TabControl _tabControl;
TabPage _tabPage;
ListView _listView;

///
this._tabControl.Controls.Add(this._tabPage);
this._tabPage.Controls.Add(this._listView)
///

private void UpdateListView()
{
    If (_listView.InvokeRequired)
    {
        IAsyncResult _IAsyncResult = _listView.BeginInvoke(//...invoke method and parameters...//);

        While (!_IAsyncResult.IsCompleted) { Application.DoEvents(); }

        _listView.EndInvoke(_IAsyncResult);
    }
    else
        _listView.Items[0].SubItems[0].Text = "[some string]";
}

я вызываю UpdateListView() из потока, отличного от потока пользовательского интерфейса. Я получил межпотоковое исключение в операторе "_listView.BeginInvoke(//...//);" и исключение возбуждается для _tabControl.

System.InvalidOperationException was unhandled
  HResult=-2146233079
  Message=Cross-thread operation not valid: Control '_tabControl' accessed from a thread other than the thread it was created on.
  Source=System.Windows.Forms
  StackTrace:
       at System.Windows.Forms.Control.get_Handle()
       at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
       at System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args)
       at TestApp.frmMain_Sub.UpdateListView(ListView _lv, Int32 _itemIndex, Int32 _subItemIndex, String _txt) in C:\Test\TestApp\frmMain_Sub.cs:line 5536
       at TestApp.frmMain_Sub.UpdateStatus() in C:\Test\TestApp\frmMain_Sub.cs:line 5012
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

как мне справиться с этим сценарием? Очень ценю, кто мог бы пройти через меня.

0 ответов

Другие вопросы по тегам