Проще говоря, передавая элементы StatusStrip, передайте StatusStrip также в параметре и используйте в качестве метода StatusStrip.BeginInvoke или Invoke и поместите в него элементы полосы состояния.
Приведенный ниже код должен помочь вам вызвать и обновить StatusStrip не только из другой задачи / потока, но и из другого класса.
//Coded by Chandraprakash [2017-07-18]
//frozenprakash.com
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UIUpdateFromOtherClass
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FN_Execute();
}
async void FN_Execute()
{
Second s = new Second();
await Task.Run(() => s.Execute(lbl1,
pb1,
ss1,
ss1Lbl1,
ss1Pb1)
);
MessageBox.Show("End");
}
}
public class Second
{
public void Execute(Label lbl1,
ProgressBar pb1,
StatusStrip ss1,
ToolStripLabel tsLbl1,
ToolStripProgressBar tsPb1)
{
lbl1.BeginInvoke(new Action(() =>
lbl1.Text = "Second"
));
pb1.BeginInvoke(new Action(() =>
{
pb1.Style = ProgressBarStyle.Marquee;
pb1.MarqueeAnimationSpeed = 10;
}));
ss1.BeginInvoke(new Action(() =>
{
tsLbl1.Text = "Second";
tsPb1.Style = ProgressBarStyle.Marquee;
tsPb1.MarqueeAnimationSpeed = 10;
}));
Thread.Sleep(3000);
}
}
}
Снимок экрана Windows Forms