مراحل زیر را باید انجام دهید:
1- تعریف ValueEventArgs برای فرستان مقدار از طریق event
public class ValueEventArgs : EventArgs
{
public int Value { get; set; }
public ValueEventArgs()
{
}
public ValueEventArgs(int value)
{
Value = value;
}
}
2- تعریف event برای تک تک پراپرتی ها و rasiedکردن آن در setter پراپرتی مربوطه
private int rotation_Angle;
public int Rotation_Angle
{
get { return rotation_Angle; }
set
{
if (rotation_Angle != value)
{
rotation_Angle = value;
OnRotation_AngleValueChaned(value);
}
}
}
public event EventHandler<ValueEventArgs> Rotation_AngleValueChanged;
private void OnRotation_AngleValueChaned(int value)
{
if (Rotation_AngleValueChanged != null)
Rotation_AngleValueChanged(this, new ValueEventArgs(value));
}
private int move_Step;
public int Move_Step
{
get { return move_Step; }
set
{
if (move_Step != value)
{
move_Step = value;
OnMove_StepValueChanged(value);
}
}
}
public event EventHandler<ValueEventArgs> Move_StepValueChanged;
private void OnMove_StepValueChanged(int value)
{
if (Move_StepValueChanged != null)
Move_StepValueChanged(this, new ValueEventArgs(value));
}
حالا هر وقت پراپرتی های مورد نظر ما تغییر کنند event مربوطه raisedخواهد شد و ما می توانیم عمل نمابش آن را انجام دهیم
3- در فرم مورد نظر event های مورد نظر را subscribeمی کنیم:
Reasoning_Engine RE = new Reasoning_Engine();
public Form1()
{
...
RE.Rotation_AngleValueChanged += new EventHandler<ValueEventArgs>(RE_Rotation_AngleValu eChanged);
RE.Move_StepValueChanged += new EventHandler<ValueEventArgs>(RE_Move_StepValueChan ged);
...
}
4- پشت متدهای مربوط به event ها با استفاده از backgroundworker عمل نمایش مقدار پراپرتی ها را انجام می دهیم. دقت شود که ما در Threadدیگری قرار داریم و باید از backgroundworkerبرای عمل نمایش استفاده کنیم
void RE_Move_StepValueChanged(object sender, ValueEventArgs e)
{
Run_Reasoning_Background_Worker.ReportProgress(e.V alue, "Move_Step");
}
void RE_Rotation_AngleValueChanged(object sender, ValueEventArgs e)
{
Run_Reasoning_Background_Worker.ReportProgress(e.V alue, "Rotation_Angle");
}
5- در نهایت نوشتن متد progress مربوط به backgroundworker
void Run_Reasoning_Background_Worker_ProgressChanged(ob ject sender, ProgressChangedEventArgs e)
{
if (e.UserState.ToString() == "Move_Step")
Move_Progress.Value = e.ProgressPercentage;
else
Rotation_Progress.Value = e.ProgressPercentage;
}