RSB will force components to be transient
On Fri, Jun 5, 2009 at 11:51 AM, Jason Meckley <[email protected]>wrote:
>
> 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
-~----------~----~----~----~------~----~------~--~---