Why SynchronizationContext is so important? C# with Example



Why SynchronizationContext is so important? C# with Example

Consider this example: 
private void button1_Click(object sender, EventArgs e) 
{ 
label1.Text = RunTooLong(); 
} 
This method will freeze UI application until the RunTooLong will be completed. The application will be unresponsive. 
You can try run inner code asynchronously: 
private void button1_Click(object sender, EventArgs e) 
{ 
Task.Run(() => label1.Text = RunTooLong()); 
} 
But this code won't execute because inner body may be run on non-UI thread and it shouldn't change UI properties 
directly: 
private void button1_Click(object sender, EventArgs e) 
{ 
Task.Run(() => 
{ 
var label1Text = RunTooLong(); 
if (label1.InvokeRequired) 
lable1.BeginInvoke((Action) delegate() { label1.Text = label1Text; }); 
else 
label1.Text = label1Text; 
}); 
} 
Now don't forget always to use this pattern. Or, try SynchronizationContext.Post that will make it for you: 
private void button1_Click(object sender, EventArgs e) 
{ 
Task.Run(() => 
{ 
var label1Text = RunTooLong(); 
SynchronizationContext.Current.Post((obj) => 
{ 
label1.Text = label1 Text); 
}, null); 
}); 
} 
 

0 Comment's

Comment Form

Submit Comment