![](/img/trans.png)
[英]Cross-thread operation not valid: Control 'statusStrip' accessed from a thread other than the thread it was created on
[英]Cross-thread operation not valid - StatusStrip controls
我有一个带有一个ToolStripProgressBar
和一个ToolStripStatusLabel
的StatusStrip
。 当我需要更新它们的值时,即使在progressChanged
事件中,我也面临着跨线程操作问题。 所以通常我需要在检查InvokeRequired
属性后通过控件的Invoke
方法处理它。 但是在这种情况下, ToolStripProgressBar
或ToolStripStatusLabel
没有该属性或该方法。 以下是引发异常的代码段。
调用它们的正确方法是什么?
void Uploader_ProgressChanged ( object sender, ProgressChangedEventArgs e )
{
//ProgressBar is of type ToolStripProgressBar here throws exception
CF.ProgressBar.Value += e.ProgressPercentage;
if ( e.UserState != null )
{
// throws exception
CF.ProgressStatusLabel.Text = "Uploading " + e.UserState;
}
}
为避免此问题,您必须使用MethodInvoker
您可以通过以下方式包装代码:
Invoke((MethodInvoker)delegate
{
CF.ProgressBar.Value += e.ProgressPercentage;
if ( e.UserState != null )
{
CF.ProgressStatusLabel.Text = "Uploading " + e.UserState;
}
}};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.