Привет, у меня есть одна форма окна, но мне нужно изменить код, чтобы он работал как класс, а не форма. Функции InvokeRequired и Invoke мешают мне сделать это. Я обновил код, чтобы показать полный класс. Код постоянно обновляется, чтобы проверить, изменился ли весь список значений
using System;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Ets2SdkClient.Demo
{
public partial class Ets2SdkClientDemo : Form
{
public Ets2SdkTelemetry Telemetry;
public Ets2SdkClientDemo()
{
InitializeComponent();
Telemetry = new Ets2SdkTelemetry();
Telemetry.Data += Telemetry_Data;
Telemetry.JobFinished += TelemetryOnJobFinished;
Telemetry.JobStarted += TelemetryOnJobStarted;
}
private void TelemetryOnJobFinished(object sender, EventArgs args)
{
MessageBox.Show("Job finished, or at least unloaded nearby cargo destination.");
}
private void TelemetryOnJobStarted(object sender, EventArgs e)
{
MessageBox.Show("Just started job OR loaded game with active.");
}
private void Telemetry_Data(Ets2Telemetry data, bool updated)
{
try
{
if (this.InvokeRequired)
{
this.Invoke(new TelemetryData(Telemetry_Data), new object[2] { data, updated });
return;
}
// Do some magic trickery to display ALL info:
var grps = new object[]
{
data.Drivetrain, data.Physics, data.Controls, data.Axilliary, data.Damage, data.Lights, data.Job
};
foreach (var grp in grps)
{
// Find the right tab page:
var grpName = grp.GetType().Name;
if (grpName.StartsWith("_"))
grpName = grpName.Substring(1);
// All properties;
var props = grp.GetType().GetProperties().OrderBy(x => x.Name);
var labels = new StringBuilder();
var vals = new StringBuilder();
foreach (var prop in props)
{
labels.AppendLine(prop.Name + ":");
object val = prop.GetValue(grp, null);
if (val is float[])
{
vals.AppendLine(string.Join(", ", (val as float[]).Select(x=> x.ToString("0.000"))));
}
else
{
vals.AppendLine(val.ToString());
}
}
}
}
catch
{
}
}
}
}