Application.LoadLevel Freezes Game?

Hi guys, I Made a Script which loads the next level and fades a Texture.
But the script freezes as soon as i Click the Object.

Any Idea what’s going on ?

Here is the Code:

using UnityEngine;
using System.Collections;

public class Menu2 : MonoBehaviour {
	public string levelToLoad;
	public AudioClip soundhover;
	public AudioClip beep;
	public bool QuitButton = false;
	public Texture2D Fader;
	public Texture2D Black;
	public Texture2D Slender; // Set this in inspector.
	private AsyncOperation async = null; // When assigned, load is in progress.

	void OnMouseEnter(){
		GetComponent<AudioSource>().PlayOneShot(soundhover);

	}

	void  OnMouseUp(){
		GetComponent<AudioSource> ().PlayOneShot (beep);
		if(QuitButton){
			Application.Quit();
		}
		else{
			loadLevel();
		}
	}
	public void loadLevel(){
		async = Application.LoadLevelAsync("City");
		async.allowSceneActivation = true;
	}
	public void startLevel(){
		async.allowSceneActivation = true;
		async = null; //because I made it a static member
	}
	
	void OnGUI() {
		if (async != null) {
			GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), Slender);
			GUI.DrawTexture(new Rect(Screen.width * async.progress - Screen.width, 0,Screen.width * async.progress, Screen.height), Fader);
			GUI.DrawTexture(new Rect(Screen.width * async.progress, 0,Screen.width * async.progress + Screen.width, Screen.height), Black);
		}

	}
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		Screen.lockCursor = false;
		if (async.isDone)
			startLevel ();
	}
}

There is a real problem with LoadLevelAsync. If not used JUST the right way it can, and will cause crashes, both in editor and the stand-alone player. Here is a script that does what you want, and it works (js):

var LoadignWheel : GameObject;
var LevelToLoad = "";

private var Globalasync : AsyncOperation;
private var counter = 0.0;
private var fadeOut = false;
private var LoadProgress = 0.0;

function Start ()
	{
	var async : AsyncOperation = Application.LoadLevelAsync (LevelToLoad);
	async.allowSceneActivation = false;
	Globalasync = async;
	}

function Update ()
	{
	if (!fadeOut && counter <= 0.5)
		{
		LoadignWheel.renderer.material.SetColor("_TintColor", Color(1,1,1,counter));
		counter += Time.deltaTime * 0.1;
		}
	else
		{
		fadeOut = true;
		}
	LoadProgress = Globalasync.progress;
	if (LoadProgress >= 0.9f)
		{
		if (counter > 0.0 && fadeOut)
			{
			LoadignWheel.renderer.material.SetColor("_TintColor", Color(1,1,1,counter));
			counter -= Time.deltaTime * 0.2;
			}
		}
	if (LoadProgress >= 0.9f)
		{
		Globalasync.allowSceneActivation = true;
		}
	}

This is the code I used in my project. I have a LoadingWheel that I fade in and out while the level is loading.