У меня есть класс с событием и пользовательским EventArgs. Значимый код:Cross.Thread нарушение
public void OnTickReceived(TickReceivedEventArgs e)
{
EventHandler<TickReceivedEventArgs> handler = TickReceived;
if (handler != null)
handler(this, e);
}
public event EventHandler<TickReceivedEventArgs> TickReceived = delegate { };
и потребляя класс в форме пользовательского интерфейса Windows, подписавший событие, как этот
private void button4_Click(object sender, EventArgs e)
{
bool esito;
t = new T3OpenStockReader();
esito = t.Connect();
textBox1.Text += "Connection: " + esito.ToString() + "\r\n";
Application.DoEvents();
if (esito)
{
esito = t.Subscribe("MI.EQCON.2552");
textBox1.Text += "Subscription: " + esito.ToString() + "\r\n";
Application.DoEvents();
}
if (esito)
{
t.Start();
t.TickReceived += NewTick_Event;
System.Diagnostics.Debug.Print("Reading started...");
}
}
private void NewTick_Event(object sender, TickReceivedEventArgs e)
{
textBox1.Text += e.tick.DT + " " + e.tick.Price + " " + e.tick.Volume + "\r\n";
}
я получает InvalidOperationException
- cross.thread операции. Что я делаю не так?
Вы не должны быть, и я не вижу необходимости в вас, вызывая 'DoEvents' в этом обработчике кликов. Вы делаете ненужные ненужные ошибки или проблемы. – Servy
Спасибо, DoEvents является остатком последнего рефакторинга кода. –
Тогда просто признайте, что это стоит удалить, поскольку это активно вредно, а не просто бесполезно. – Servy