Image source 
wikipedia
         Here Gx 
and Gy are the two kernels and A is the original image.
At each point in 
the image, the resulting gradient approximations can be combined to give the 
gradient magnitude, using:
                                  Image source :wikipedia
Code for sobel filter
                                                                                                       Image source :wikipedia
Code for sobel filter
namespace sobel
   {
      class sobel
        {
           Bitmap b, b1;
           public Image apply(Image im)
              {
                  int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } };   //  The matrix Gx
                  int[,] gy = new int[,] { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } };  //  The matrix Gy
                  b = (Bitmap)im;
                  Bitmap b1 = new Bitmap(im);
                  for (int i = 1; i < b.Height - 1; i++)   // loop for the image pixels height
                    {
                      for (int j = 1; j < b.Width - 1; j++) // loop for image pixels width    
                        {
                           float new_x = 0, new_y = 0;
                           float c;
                           for (int hw = -1; hw < 2; hw++)  //loop for cov matrix
                             {
                               for (int wi = -1; wi < 2; wi++)
                                 {
                                   c =(b.GetPixel(j+wi,i+hw).B +b.GetPixel(j+wi,i+hw).R +b.GetPixel(j+ wi,i+hw).G)/3;
                                   new_x += gx[hw + 1, wi + 1] * c;
                                   new_y += gy[hw + 1, wi + 1] * c;
                                  }
                             }
                            if (new_x * new_x + new_y * new_y > 128*128)
                               b1.SetPixel(j, i, Color.Black);
                            else
                               b1.SetPixel(j, i, Color.White);
                          }
                      }
                return (Image)b1;
         }
}
The class takes as input a grayscale image .The code to convert an image to grayscale is 
given below if required .
public Image gray(Image Im)
     {
       Bitmap b = (Bitmap)Im;
       for (int i = 1; i < b.Height ; i++)   // loop for the image pixels height
         {
            for (int j = 1; j < b.Width ; j++)  // loop for the image pixels width
              {
                 Color col;
                 col = b.GetPixel(j,i );
                 b.SetPixel(j , i , Color.FromArgb((col.R + col.G + col.B) / 3, (col.R + col.G + col.B) / 3, (col.R + col.G + col.B) / 3));
              }
          }
        return (Image)b;
     }
http://www.eggheadcafe.com/tutorials/aspnet/c833c86a-677a-4ff3-b820-43126cbeb1a7/net-gdi-graphics-edge-d.aspx