Я добился некоторого прогресса в своем последнем вопросе: Обратная передача текста события из многопоточного класса в Windows ActiveForm
Я также добился определенного прогресса в этом: http://www.codeproject.com/KB/cs/simplesteventexample.aspx
Но я опять застрял, кажется, код не запускает событие или не обрабатывает его должным образом (я действительно новичок в пользовательских событиях).
Вот то, что у меня в настоящее время есть мудрый код.
public class TextArgs : EventArgs
{
private string CurrentText;
public string Text
{
set
{
CurrentText = value;
}
get
{
return this.CurrentText;
}
}
}
class Scan
{
public event TextHandler Text;
public delegate void TextHandler(Scan s, TextArgs e);
private void ProcessDirectory(String targetDirectory, DateTime cs)
{
SetScanHistory(targetDirectory);
// Does a bunch of stuff...
}
// EDIT: Forgot this bit of code; thanks for pointing this out :)
// Sets the text of scan history in the ui
private void SetScanHistory(string text)
{
if (Text != null)
{
TextArgs TH = new TextArgs();
TH.Text = text;
Text(this, TH);
}
}
// Does more stuff...
}
Моя форма Windows:
public partial class MyWinForm: Form
{
private void NewScan(Object param)
{
Scan doScan = new Scan();
doScan.StarScan(Convert.ToInt32(checkBoxBulk.Checked));
doScan.Text += new Scan.TextHandler(SetText);
}
// Sets the text of txtScanHistory to the text
private void SetText(Scan s, TextArgs e)
{
// Invoke is always required (which is intended)
this.Invoke((MethodInvoker)delegate
{
txtScanHistory.Text += e.Text + Environment.NewLine;
});
}
}
Опять же, я не вижу никаких ошибок, но текстовое поле не обновляется вообще. Я уверен, что я не пишу что-то, я просто недостаточно осведомлен в теме пользовательских событий, я не уверен, как это исправить.