Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 736
  • Last Modified:

Delegate, Lambda and invoke.

Hi!

I have a question regarding these examples I have here. Is there another way to do this , a better way? Should I use the MethodInvoker?
// using delegate 
this.workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
{
     BeginInvoke(new MethodInvoker(delegate()
     {
          this.uxInfo.Text = "Completed";
      }));
};

// Using lambda
this.workflowRuntime.WorkflowCompleted += (sender, e) => BeginInvoke(new MethodInvoker(delegate
{
     this.uxInfo.Text = "Completed";
}));

Open in new window

0
AWestEng
Asked:
AWestEng
  • 6
  • 4
1 Solution
 
Richard LeeSoftware EnthusiastCommented:
Both examples are the same. The second just uses the more concise lamba syntax. Your aim here is to execute the method asynchronously which is achieve by BeginInvoke, however one drawback is that it is executed asynchronously on the same thread that created the UI control's handle was created on, see:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.begininvoke.aspx

You should consider using the new .NET 4 multi-threading features which will execute on another thread and synchronise to allow UI updates. The following example demonstrates both doing the above in a WPF application, but then customised to work with any type of application.

http://blogs.msdn.com/b/csharpfaq/archive/2010/06/18/parallel-programming-task-schedulers-and-synchronization-context.aspx

DaTribe
0
 
Richard LeeSoftware EnthusiastCommented:
BTW there are four articles in this series. You should probably start from 1 to appreciate fully the new Task Parallel Library (TPL).

http://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx

DaTribe
0
 
AWestEngAuthor Commented:
sounds really nice, I will read the articles, but I use Winforms in this app, is it possible to do it there too?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Richard LeeSoftware EnthusiastCommented:
The articles focus on WPF and WinForms. The TPL works the same for both the only difference is just how the UI controls are updated.

DaTribe
0
 
AWestEngAuthor Commented:
nice reading, thx.

In this case I have a workflow instance, and what I have read the workflow is executed in it's own thread, it is sending back some stuff to the ui tread. But I'm not sure how to use this in my workflow. Is it possible to implement it here to? But when is it good to use, in the case when there is only a lot of data exchange between a backround thread and the UI thread or is good to use  even when there is few data exchange between them?
0
 
Richard LeeSoftware EnthusiastCommented:
When faced with this decision it is prudent to ask yourself if the work to be accomplished will be enough to cause the UI to freeze preventing the user from performing any actions. If the answer is yes, then you have valid candidate.

Besides UI situations if your application required background work to be done (meaning your application can proceed while a background thread does something) then this is a valid candidate.

I think the question to ask here is are you having a problem to begin with or do you just want to perform multi-threading.

What exactly is the problem?

DaTribe
0
 
AWestEngAuthor Commented:
in this case  there are really no problems. this is more of a "good practice" question.

I use a "WF - state machine" in my app, and I send back which state is currently executed and show that informaiton in a listview and light up som "leds" that are placed in image that represents the state machine, so I can see how the states are executed.
0
 
Richard LeeSoftware EnthusiastCommented:
If the application is working already and the workflow executes on a separate thread then unless there are more specifics peculiarities then there is no recommended that I can provide besides what has been previously mentioned.

DaTribe
0
 
AWestEngAuthor Commented:
thx man :)
0
 
Richard LeeSoftware EnthusiastCommented:
No probs.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now