Thursday, August 6, 2009

Easiest way to start a thread

The easiest way to start a process on another thread is to call ThreadPool.QueueUserWorkItem.
Example:
// DoSomeWork is a method.
ThreadPool.QueueUserWorkItem(DoSomeWork);
Note: The DoSomeWork method has to have an Object as a parameter.
private static void DoSomeWork(object info)
{
    // Code that does work.
}
If you need to pass data into your method, you can do so:
ThreadPool.QueueUserWorkItem(DoSomeWork, "Info")
You will just have to cast the object back into the appropriate data type.
private static void DoSomeWork(object info)
{
    string workInfo = (string) info;
    // Code that does work.
}


More Info: MSDN: QueueUserWorkItem

Wednesday, August 5, 2009

Adding Text to Images

Adding text to an image requires 2 steps:
  • Create a Graphics object
  • Create a Font object
  • Call Graphics.DrawString method
Code Example:
private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Font f = new Font("Arial", 12, FontStyle.Bold);
    g.DrawString("Copyright 2009", f, Brushes.Black, 10, 10);
}
Why would you do this?
Most likely you wouldn't. You would use a label instead. But you can also draw strings on images and that is most likely what you would use this method for.

More Info: MSDN: Graphics.DrawString Method

Tuesday, August 4, 2009

Assigning Images to Windows Controls

Use a Bitmap or Image class.
button1.BackgroundImage = new Bitmap("bm.jpg");
// or
pictureBox1.BackgroundImage = Image.FromFile("bm.jpg");


More Info: MSDN: Image Class

Creating and Saving a Picture

There are 3 steps to creating and saving a picture:
  1. Create a Bitmap object.
  2. Edit it using Graphics object.
  3. Call Bitmap.Save method to save it.

Code Example:
Bitmap bm = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bm);
g.DrawEllipse(new Pen(Color.Red), new Rectangle(5, 5, 90, 90));
bm.Save("bm.jpg", ImageFormat.Jpeg);
Here is what it looks like:
If you would like to edit an existing image instead, you can use:
Bitmap bm = new Bitmap("existingImage.jpg");

More Info: MSDN: Bitmap Class

Thursday, July 23, 2009

Nullable

When declaring a value type (int, bool, char, DateTime, etc.) you cannot initialize it to null or you'll get this error message: To fix this you need to declare your variable as nullable:
Nullable<bool> answer1 = null;
// or
bool? answer2 = null;
When this is done, 2 new properties become available to you, HasValue and Value. Now you can check if your variable has been assigned a value yet or if it's still null with HasValue.
if (answer1.HasValue) Console.WriteLine("answer1 is {0}", answer1);


More Info: MSDN: Nullable(T) Structure

Wednesday, June 24, 2009

Authenticated User Information

So you have used the built-in ASP.NET Login controls (Login, LoginView, etc). Now what if you want to get at the authenticated user information in code?

Access it through the HttpContext.Current.User property.

Examples:
// Get the user's name
string userName = HttpContext.Current.User.Identity.Name;

More Info: MSDN: HttpContext.Current.User

Saturday, January 17, 2009

Enum.Parse (String to Enum)

I recently wanted to convert a string held in a database to an enum. After a little digging I found Enum has a Parse method!
public enum Day
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 3,
    Wednesday = 4,
    Thursday = 5,
    Friday = 6,
    Saturday = 7
}

Day daysEnum = (Day) Enum.Parse(typeof (Day), "monday", true);
// or even parse by number!
Day daysEnum = (Day) Enum.Parse(typeof (Day), "2", true);

Since Enum doesn't have a TryParse, you should wrap it in a try-catch. More Info: MSDN: