0

我有StatusStrip一个ToolStripProgressBar和一个ToolStripStatusLabel。当我需要更新它们的值时,即使我在progressChanged事件中这样做,我也面临着跨线程操作问题。所以通常我需要Invoke在检查控件的InvokeRequired属性后通过控件的方法来处理它。但在这种情况下,要么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; 
    }
}
4

1 回答 1

2

为避免此问题,您必须使用MethodInvoker

你可以这样包装你的代码:

Invoke((MethodInvoker)delegate
{
    CF.ProgressBar.Value += e.ProgressPercentage; 

    if ( e.UserState != null )
    { 
        CF.ProgressStatusLabel.Text = "Uploading " + e.UserState; 
    }
}};
于 2013-11-05T12:31:49.630 回答