Background workers and terrain

I currently have terrain and terraindata I am calling to use in a background work - I get the terraindata loaded in start by using. .

	void Start{
	var go = GameObject.Find ("MapTerrain");
	T = go.GetComponent<Terrain> ();
	TD = T.terrainData;
	Debug.Log (TD.name.ToString ());
	ExportImportBG.DoWork += new System.ComponentModel.DoWorkEventHandler (BGWork);
	}

I then call it in BGWork, as. . .

private void BGWork ()
{
Debug.Log (TD.name);
}

This code works properly in Start and Update, but once I get it on the background worker I get nothing but

UnityEngine.Object:get_name()
ExportTheMap:BGWork(Object, DoWorkEventArgs) (at Assets\ExportTheMap.cs:104)
System.ComponentModel.BackgroundWorker:OnDoWork(DoWorkEventArgs)
System.ComponentModel.BackgroundWorker:ProcessWorker(Object, AsyncOperation, SendOrPostCallback)

I can’t seem to figure out how to send it onto the threadworker properly. Seems it doesn’t want call the terrain implicitly or explicitly - I was thinking of using unsafe code and turning T and TD into delegates, but I hear that unity web browser does not support unsafe code. I’m a bit new to background workers, can anyone help me figure out what is wrong?

You can’t use threads with Unity functions, you can only use thread-safe Mono functions in threads.