There are two forms of Property in C#: automatic and variable backed.
An automatic property leaves the system to handle the backing variable:
public int MyProperty { get; set; }
And the only way you can get access to the value is directly via the property name.
A variable backed property is different:
private int _MyProperty = 666;
public int MyProperty
{
get { return _MyProperty; }
set { _MyProperty = value; }
}
Externally it is identical to an automatic property, but inside the class you can access the variable that holds the data directly:
...
int x = _MyProperty;
...
What you are trying to do is combine the two, and that means every time you try and use the property, it ends up in an infinite loop trying to call the Getter or Setter from inside the Getter or Setter - and eventually, you app runs out of stack and crashes.
So try this:
private int _TimeToComplete = 0;
public int TimeToComplete
{
get {return _TimeToComplete; }
set { _TimeToComplete = NumberOfExercises * TIME_PER_EXERCISE;}
}