Hi Erick,
Thanks immensely.  This is what I'm looking for. I would be grateful for any
examples\links\experience you can pass my way. I want to make sure I handle
this correctly rather than incorrectly. I believe my best course will be to
execute on the same thread and have a disclaimer for the developers that use
the BO and to be careful about blocking the thread (give them enough rope,
even if they can hang themselves :-) ).

Thanks a bunch for your help.

Cheers!
dave
----- Original Message -----
From: "Erick Thompson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, May 24, 2002 3:22 PM
Subject: Re: [DOTNET] delegate\event\thread ?


> It sounds like what you want is an event. Here is how I would do it, but
> read my disclaimer after the description.
>
> First, decide what information you want passed back in the event. If you
> don't need to pass anything back, just declare an event in your BO.
>
> In BO:
>
> public event EventHandler RowProcessed;
>
>
>
> protected OnRowProcessed() {
>
>     if (IndexStarted != null) {
>
> IndexStarted(this, null);
>
>     }
>
> }
>
>
>
> Then, in the client, use
>
>
>
> myBO.RowProcessed += new EventHandler(RowProcessedHandler);
>
>
>
> private void RowProcessedHandler(object sender, EventArgs e) {
>
>   // do stuff
>
> }
>
>
>
> If you do want to pass stuff back, like the row just processed, or info
> about the progress (x of 123 done), just create a new class for the
> argument, derived from EventArg, and new delegate to handle the event. If
> you need an example, let me know, but MSDN has some very good examples.
>
>
>
> Now for the disclaimer. The event will be raised on the same thread that
is
> running in your BO. This means that if the people who use your BO decide
use
> your thread for something else, you're blocked until they are finished.
So,
> if in the event handler they start a method call to another object
(perhaps
> even in your BO), then you are stuck in OnRowProcessed until the other
> method call is done. If all they do is update the display, it's not a
> problem. If you want to make sure that your processing continues no matter
> what, you need to create a new thread and do your work on that. But, be
> aware that you should not raise any events on that new thread! The events
> should be raised on the thread that created the BO object (usually the
> Winform thread).
>
>
>
> This is a common problem that I and others have faced. Namely, how to
raise
> an event across threads. If you need to do this, let us know, and perhaps
> someone could come up with a good suggestion.
>
> Erick
>
> ----- Original Message -----
> From: "dave wanta" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, May 24, 2002 1:05 PM
> Subject: Re: [DOTNET] delegate\event\thread ?
>
>
> > unfortunately, i can't do a webservice... this has to be a stand-alone
> > object.  I have no idea what environment this will be used in, once I
> > release the object for production.  This is a utility object that will
be
> > used to perform some algorithms on a datatable.    All that's required,
is
> > that the client has pass in a datatable to the object, set a couple of
> other
> > properties, and the object will process each row...
> >
> > But I want to somehow notify the client every time a single row is
> > processed, so a client has to opportunity to work with that individual
> row.
> >
> > thanks,
> > dave
> >
> >
> > ----- Original Message -----
> > From: "franklin gray" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Friday, May 24, 2002 2:46 PM
> > Subject: Re: [DOTNET] delegate\event\thread ?
> >
> >
> > ah....then your stuck with using a web service and no events.  What you
> > could do is this...
> >
> > Create a singleton object that doesn't get GCed.  Create a web service
> that
> > excepts a datatable and pass that to the object in another thread for
> > processing.  As the processing finishes a row, add it to a collection of
> > DoneRows.  Create another Web service to ping that DoneRows for new rows
> and
> > remove the ones it grabs.
> >
> > So, you have a WS that starts the process and another one that checks
for
> > updates.
> >
> > -----Original Message-----
> > From: dave wanta [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, May 24, 2002 2:42 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [DOTNET] delegate\event\thread ?
> >
> >
> > Thanks, but can't do this in remoting..
> >
> > this is an utility object that will be used across different
departments,
> > for different purposes across the organization ( which will also be
> > geographically dispersed).
> >
> > --dave
> > ----- Original Message -----
> > From: "franklin gray" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Friday, May 24, 2002 2:30 PM
> > Subject: Re: [DOTNET] delegate\event\thread ?
> >
> >
> > oh yeah....and you will want to do this in another thread.
> >
> > -----Original Message-----
> > From: franklin gray
> > Sent: Friday, May 24, 2002 2:25 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [DOTNET] delegate\event\thread ?
> >
> >
> > Maybe what you want is a remoting BO.  A regular object that runs on the
> > server by remoting.  This can fire events but can't work through
> firewalls,
> > and of course, the clients will have to be DotNet clients.  Other then
> that,
> > I don't think anything else will work.  Web services can't fire events
so
> > they are out.
> >
> > -----Original Message-----
> > From: dave wanta [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, May 24, 2002 2:12 PM
> > To: [EMAIL PROTECTED]
> > Subject: [DOTNET] delegate\event\thread ?
> >
> >
> > Ok... ever in one of those situations where you don't even know enough
to
> > ask the right question? Well, that's what i feel like with this one.  If
I
> > should move this to a more appropriate list... let me know which list.
> >
> > ok here goes..
> >
> > I have an application that is basically 2 parts. A winform app and a
> ADO.NET
> > business object (BO), that the winform app uses and has a reference set
to
> > the BO dll.
> >
> > Many different winforms will be written to use this same Business
Object.
> > The winform applications can be written by anyone in the client's IT
> > department, and I'll be responsible for writing the BO dll.  The BO will
> be
> > doing some processing on employee records. The BO accepts a datatable,
and
> > loops through each row of the datatable, and performs some processing on
> > each row.  It's possible for the datatable to contain 10, 50, or even
> > 500,000 rows (which could relate to hrs of processing). Consequently, as
> > soon as you pass the DataTable to the BO, all winform processing is
locked
> > up, until the BO is done with the data. Now I realize the winform could
> > execute this on another thread, so that the user could continue using
the
> > winform, but what I really want to do is raise an event back to the
> winform
> > (or calling application), from inside the BO, every time a row is
> processed
> > (for example, for reporting and tracking purposes). This way the winform
> can
> > then take that individual datarow, and do some more processing with the
> > primary key, and employee ID of that row.... A few questions:
> >
> > What do I need to look at to do this? Delegates? Events? Where do I
start?
> > Urls? Links anyone?
> > Does anyone have any code snippets of something similar in concept?
> > I'm assuming I'll be raising an event back to the winform that accepts a
> > DataRow, correct? I don't know.. looking for examples...
> > Does this make any sense?
> > Also, it's possible the ADO.NET BO will be used from Console apps, and
> just
> > about anything else.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
> >
> > You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or
> > subscribe to other DevelopMentor lists at http://discuss.develop.com.
>
> You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
> subscribe to other DevelopMentor lists at http://discuss.develop.com.
>

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to