繁体   English   中英

跨线程操作无效-StatusStrip控件

[英]Cross-thread operation not valid - StatusStrip controls

我有一个带有一个ToolStripProgressBar和一个ToolStripStatusLabelStatusStrip 当我需要更新它们的值时,即使在progressChanged事件中,我也面临着跨线程操作问题。 所以通常我需要在检查InvokeRequired属性后通过控件的Invoke方法处理它。 但是在这种情况下, ToolStripProgressBarToolStripStatusLabel没有该属性或该方法。 以下是引发异常的代码段。

调用它们的正确方法是什么?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM