Click here to Skip to main content
15,898,134 members
Articles / Desktop Programming / WPF

WPF - Don't Block your UI

Rate me:
Please Sign up or sign in to vote.
4.92/5 (11 votes)
7 Jul 2011CPOL5 min read 70.2K   3.5K   40  
Using .NET 4 features to create a non-blocking user interface
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;

namespace AsyncSample.Model
{
	public class User:PropertyChangedHelper
	{
		#region FullNameProperty
		public static readonly PropertyChangedEventArgs FullNameArgs = PropertyChangedHelper.CreateArgs<User>(c => c.FullName);
		private string _FullName;

		public string FullName
		{
			get
			{
				return _FullName;
			}
			set
			{
				var oldValue = FullName;
				_FullName = value;
				if (oldValue != value)
				{
					OnFullNameChanged(oldValue, value);
					OnPropertyChanged(FullNameArgs);
				}
			}
		}

		protected virtual void OnFullNameChanged(string oldValue, string newValue)
		{
		}
		#endregion

		#region AddressProperty
		public static readonly PropertyChangedEventArgs AddressArgs = PropertyChangedHelper.CreateArgs<User>(c => c.Address);
		private string _Address;

		public string Address
		{
			get
			{
				return _Address;
			}
			set
			{
				var oldValue = Address;
				_Address = value;
				if (oldValue != value)
				{
					OnAddressChanged(oldValue, value);
					OnPropertyChanged(AddressArgs);
				}
			}
		}

		protected virtual void OnAddressChanged(string oldValue, string newValue)
		{
		}
		#endregion

		#region EmailProperty
		public static readonly PropertyChangedEventArgs EmailArgs = PropertyChangedHelper.CreateArgs<User>(c => c.Email);
		private string _Email;

		public string Email
		{
			get
			{
				return _Email;
			}
			set
			{
				var oldValue = Email;
				_Email = value;
				if (oldValue != value)
				{
					OnEmailChanged(oldValue, value);
					OnPropertyChanged(EmailArgs);
				}
			}
		}

		protected virtual void OnEmailChanged(string oldValue, string newValue)
		{
		}
		#endregion

		#region PhoneProperty
		public static readonly PropertyChangedEventArgs PhoneArgs = PropertyChangedHelper.CreateArgs<User>(c => c.Phone);
		private string _Phone;

		public string Phone
		{
			get
			{
				return _Phone;
			}
			set
			{
				var oldValue = Phone;
				_Phone = value;
				if (oldValue != value)
				{
					OnPhoneChanged(oldValue, value);
					OnPropertyChanged(PhoneArgs);
				}
			}
		}

		protected virtual void OnPhoneChanged(string oldValue, string newValue)
		{
		}
		#endregion
	}

	public class UsersProvider
	{
		public User CreateUser()
		{
			Thread.Sleep(1500);//Some serious business
			var user = new User();
			return user;
		}

		public void RemoveUser(User usr)
		{
			Thread.Sleep(1500);//And another one
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Russian Federation Russian Federation
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions