Starting and stopping the screensaver in C# can be done by calling the Windows API's PostMessage function, which posts a message to the Windows Message Queue asynchronously. Starting it is straight forward. But stopping it is somewhat tricky. I accomplished this here by stopping the window on the foreground which will always be the screensaver if it is running.

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int PostMessage(
    IntPtr hWnd, int wMsg, int wParam, int lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();

private const Int32 WM_SYSCOMMAND = 0x112;
private const Int32 SC_SCREENSAVE = 0xF140;
private const int WM_CLOSE = 16;

public mainForm()
{
    InitializeComponent();
}

private void callScreensaverButton_Click(object sender, EventArgs e)
{
    // Start the screen saver.
    PostMessage(this.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

    disableScreenSaverTimer.Enabled = true;
}

private void disableScreenSaverTimer_Tick(object sender, EventArgs e)
{
    //close the application foreground
    PostMessage(GetForegroundWindow(), WM_CLOSE, SC_SCREENSAVE, 0);

    disableScreenSaverTimer.Enabled = false;
}