В вашем простейшем случае лучше сделать вот так:
Завести два поля:
Thread workingTask;
bool threadIsCanceled;
Запуская делать вот так:
workingTask = new Thread(UpdateTextInALoop);
workingTask.Start();
threadIsCanceled = false;
В функции которая выполняется в другом потоке:
private void UpdateTextInALoop()
{
try
{
int i = 0;
while (i < 1000)
{
SetTextSafe(i.ToString(CultureInfo.InvariantCulture));
i++;
Thread.Sleep(100);
ThowIfCanceled();
}
}
catch (Exception ex)
{
//canceled
}
}
private void ThowIfCanceled()
{
if (threadIsCanceled)
throw new Exception();
}
и чтобы остановить воток просто:
if (workingTask != null)
{
threadIsCanceled = true;
workingTask.Join();
workingTask = null;
}