Есть несколько способов достичь того, чего вы хотите.
1) Вы можете добавить ссылку на целевую форму как свойство класса Scan.cs
public MyWinForm1 WinFormReference { get; set; }
// Sets the text of scan history in the ui
private void SetScanHistory(string text)
{
if (this.WinFormReference != null)
{
this.WinFormReference.SetText(text);
}
}
тогда вы можете передать ссылку на ваш класс сканирования в экземпляр WinForm1 и установить соответствующее свойство [в этом случае я передаю класс сканера с помощью конструктора WinForm]:
public void WinForm1(Scan scanner)
{
if (scanner != null) scanner.WinFormReference = this;
}
2) Вы можете добавить пользовательское событие в класс сканирования, а затем подключить делегата к обратному вызову в вашей WinForm [опять же, вашей WinForm потребуется ссылка на ваш класс сканирования]:
public class SetScanHistoryEvents: EventArgs
{
public SetScanHistoryEvents(string text)
{
this.Text = text;
}
public string Text { get; set; }
}
public class Scan
{
public event EventHandler<SetScanHistoryEvents> ScanHistoryEvent;
// Sets the text of scan history in the ui
private void SetScanHistory(string text)
{
if (this.ScanHistoryEvent != null)
{
this.ScanHistoryEvent(this, new SetScanHistoryEvents(text));
}
}
}
Затем вы подключаете обратный вызов в конструкторе вашей формы (или в другом месте):
public MyWinForm1(Scan scanner)
{
if (scanner != null)
scanner.ScanHistoryEvent += new EventHandler<SetScanHistoryEvents>(scanner_ScanHistoryEvent);
}
private void scanner_ScanHistoryEvent(object sender, SetScanHistoryEvents e)
{
this.Invoke((MethodInvoker)delegate
{
// txtScanHistory is a TextBox
txtScanHistory.Text += text + Environment.NewLine;
});
}