1st I spiked my own console app with simple console.writeline
messages. this worked, so long as i blocked the instance subscription
with a ManualResetEvent. didn't care for that too much as i'm blocking
a thread (no performance gain) and the concept of messaging and a
console was already provided with the source.
now i'm moving on to a simple winforms app. messaging seems to make
more sense here because the UI could consume messages and update the
interface automatically for the user.
here is my setup.
1 form, with 2 user controls (Ping and Pong)
Ping consumes SentToPing messages and Pong consumes SentToPong
messages.
When form 1 is shown it tells Ping to send a message to pong
Pong consumes the message, changes the background color (red, green),
and replies
Ping consumes the message, changes the background color (orange, blue)
and replies
This continues for 10 iterations, then replies stop.
all is working except:
the background color does not change.
no exceptions are thrown.
I can step through all the code without error.
having zero experience with win form development am I missing
something?
code below.
public partial class Main : Form
{
private readonly Ping Ping;
private readonly Pong Pong;
public Main(Ping ping, Pong pong)
{
Ping = ping;
Pong = pong;
InitializeComponent();
Shown += MainShown;
}
private void MainShown(object sender, EventArgs e)
{
Controls.Add(Ping);
Controls.Add(Pong);
Ping.Top = 10;
Pong.Top = Ping.Height + 20;
Ping.SendAMessageToPong();
Shown -= MainShown;
}
}
public partial class Ping :
UserControl,
ConsumerOf<SendToPing>
{
private readonly IServiceBus Bus;
public Ping(IServiceBus bus)
{
Bus = bus;
InitializeComponent();
}
public void Consume(SendToPing message)
{
var number = message.Number;
BackColor = number%2 == 0 ? Color.Orange : Color.Blue;
Thread.Sleep(500);
Bus.Reply(new SendToPong {Number = number + 1});
}
public void SendAMessageToPong()
{
Bus.Send(new SendToPong {Number = 1});
}
}
public partial class Pong :
UserControl,
ConsumerOf<SendToPong>
{
private readonly IServiceBus Bus;
public Pong(IServiceBus bus)
{
Bus = bus;
InitializeComponent();
}
public void Consume(SendToPong message)
{
var number = message.Number;
if (number > 10) return;
BackColor = number % 2 == 0 ? Color.Red : Color.Green;
Thread.Sleep(500);
Bus.Reply(new SendToPing {Number = number + 1});
}
}
public class StartableForm : IStartable
{
private readonly Main Form;
public StartableForm(Main form)
{
Form = form;
}
public void Start()
{
Application.Run(Form);
}
public void Stop()
{
}
}
public class StartableServiceBus : IStartable
{
private readonly IStartableServiceBus Bus;
public StartableServiceBus(IStartableServiceBus bus)
{
Bus = bus;
}
public void Start()
{
Bus.Start();
}
public void Stop()
{
Bus.Dispose();
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---