title: Using Stopwatch in C#
body: <p>Does anyone know how I can add a timer function to this code that solves sudoku puzzles?
  I've tried the Stopwatch class but I can't get it to work because I don't know exactly where to put it. I've tried several places but always get errors. The main purpose of the code works but I'd like to add a timer function to see how long the code ran for.</p>
  
  <pre><code>using System;
  
  namespace SuDoKu
  {
    public class SuDoKu
    {
      private int[,] grid;
  
      public SuDoKu()
      { 
          grid = new int[9, 9];
      } 
       static void Main(string[] args)
       {
          SuDoKu sdk = new SuDoKu();
  
          int[,] grd = {
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                       { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
  
          for(int i = 0; i &lt; 9; i++)
              for(int j = 0; j &lt; 9; j++)
                  sdk.EnterToGrid(grd[i, j], new Point(i, j));
  
          Console.WriteLine("Original Grid"); 
  
          sdk.Display(); 
  
          sdk.Solve(sdk.NextAvailableCell(), new Point()); 
  
          Console.WriteLine("\n\n\nSolved Grid"); 
  
          sdk.Display(); 
  
          Console.WriteLine();
      }
  
      public void Display()
      {
          for(int i = 0; i &lt; 9; i++)
          {
              Console.WriteLine();
  
              for(int j = 0; j &lt; 9; j++)
              {
                  if(ShowFromGrid(new Point(i, j)) == 0) {
                      Console.Write("0 ");
                  }
                  else
                  {
                      Console.Write(ShowFromGrid(new Point(i, j)) + " ");
                  }
  
                  if(j == 2 || j == 5)
                  {
                      Console.Write("| ");
                  }
              }
              if(i == 2 || i == 5) {
  
                  Console.Write("\n------|-------|------ ");
              }
          }
      }
      public void EnterToGrid(int num, Point pos) {
          grid[pos.X, pos.Y] = num;
      }
  
      public int ShowFromGrid(Point pos) {
          return grid[pos.X, pos.Y];
      }
  
      public void Solve(Point pos, Point prevPos) {
  
          if(pos.X &lt; 9 &amp;&amp; pos.Y &lt; 9)
          {
              Point posPrev = new Point();
  
              if(grid[pos.X, pos.Y] == 0)
              {
                  for(int i = 1; i &lt;= 9; i++)
                  {
                      if(IsThisNumberPossibleInTheGrid(i, pos))
                      {
                          grid[pos.X, pos.Y] = i;
  
                          posPrev.X = pos.X;
  
                          posPrev.Y = pos.Y;
  
                          Point posNext = NextAvailableCell();
  
                          if(!posNext.Equals(new Point()))
  
                              Solve(posNext, posPrev);
                      }
                  }
                  if(grid[pos.X, pos.Y] == 0)
                  {
                      if(!prevPos.Equals(new Point()))
  
                          grid[prevPos.X, prevPos.Y] = 0; 
  
                      return;
                  }
              }
          }
          else
          {
              Point posNext = NextAvailableCell();
  
              if(!posNext.Equals(new Point()))
                  Solve(posNext, pos);
          }
      }
  
      public Point NextAvailableCell()
      {
          for(int i = 0; i &lt; 9; i++)
              for(int j = 0; j &lt; 9; j++)
                  if(grid[i, j] == 0)
                      return new Point(i, j);
  
          return new Point();
      }
  
      public bool IsThisNumberPossibleInTheGrid(int num, Point pos) {
  
          if(IsThisNumberPossibleInTheBlock(num, pos))
          {
              for(int i = 0; i &lt; 9; i++)
              {
                  if(grid[i, pos.Y] == num &amp;&amp; pos.X != i)
                  {
                      return false;
                  }
  
                  if(grid[pos.X, i] == num &amp;&amp; pos.Y != i)
                  {
                      return false;
                  }
              }
              return true;
          }
          return false;
      }
  
      public bool IsThisNumberPossibleInTheBlock(int num, Point pos)
      {
          Point Grid = new Point();
  
          Grid.X = (pos.X &gt;= 0 &amp;&amp; pos.X &lt;= 2) ? 0 : ((pos.X &gt;= 3 &amp;&amp; pos.X &lt;= 5) ? 3 : ((pos.X &gt;= 6 &amp;&amp; pos.X &lt;= 8) ? 6 : -1));
          Grid.Y = (pos.Y &gt;= 0 &amp;&amp; pos.Y &lt;= 2) ? 0 : ((pos.Y &gt;= 3 &amp;&amp; pos.Y &lt;= 5) ? 3 : ((pos.Y &gt;= 6 &amp;&amp; pos.Y &lt;= 8) ? 6 : -1));
  
          if(!Grid.Equals(new Point()))
          {
              for(int i = Grid.X; i &lt; Grid.X + 3; i++)
              {
                  for(int j = Grid.Y; j &lt; Grid.Y + 3; j++)
                  {
                      if(grid[i, j] == num &amp;&amp; !pos.Equals(new Point(i, j)))
                          return false;
                  }
              }
              return true;
          }
          return false;
      }
  }
  
    public class Point
    {
      public int X;
  
      public int Y;
  
      public Point()
      {
          this.X = -1;
          this.Y = -1;
      }
  
      public Point(int x, int y)
      {
          this.X = x;
          this.Y = y;
      }
  
      public bool Equals(Point p)
      {
          return (this.X == p.X &amp;&amp; this.Y == p.Y) ? true : false;
      }
    }
  }
  </code></pre>