namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public BackThread Worker { get; }
public Form1()
{
InitializeComponent();
Worker = new BackThread();
}
private void btnStart_Click(object sender, EventArgs e)
{
progressBar1.Value = 0;
Worker.ValueChanged += Worker_ValueChanged;
Worker.Start();
}
private void Worker_ValueChanged()
{
/// Расскоментируйте что бы поймать ошибку
// progressBar1.Value = Worker.Value;
if (this.InvokeRequired)
{
this.BeginInvoke(new ValueChangedDelegate(ChangeValue));
}
}
public void ChangeValue()
{
progressBar1.Value = Worker.Value;
}
}
public delegate void ValueChangedDelegate();
public class BackThread
{
public int Value { get; set; }
public event ValueChangedDelegate ValueChanged;
public void Start()
{
var thread = new Thread(new ThreadStart(Run));
thread.Start();
}
private void Run()
{
for (int i = 0; i <= 100; i++)
{
Value = i;
OnValueChanged(i);
Thread.Sleep(100);
}
}
private void OnValueChanged(int i)
{
ValueChanged?.Invoke();
}
}
}
public static void Print(string msg)
{
tuPush.Add(msg + "\r\r\n");
result = "";
if (tuPush.Count > 10)
{
tuPush.RemoveAt(0);
}
for (int i = 0; i < tuPush.Count; i++)
{
result = result + tuPush[i];
}
textBoxLog.Text = result; //это передаю из формы при старте
}
где то в начале класса формы
public Logger Log { get; }
В конструкторе
Log = new Logger();
Log.ValueChanged += Log_ValueChanged;
public static void Print(string msg)
{
tuPush.Add(msg + "\r\r\n");
result = "";
if (tuPush.Count > 10)
{
tuPush.RemoveAt(0);
}
for (int i = 0; i < tuPush.Count; i++)
{
result = result + tuPush[i];
}
OnValueChanged(result);
}