Единственный способ сделать это состоит в том, чтобы второй поток (возможно, тот, который создал рабочий поток) отслеживал, а затем уничтожал его или грациозно вызывал его для немедленного выхода. Убийство потоков следует избегать, и использовать только в качестве крайней меры. Вот пример того, как:
Thread t = new Thread(myLongThreadProc);
t.Start();
Thread.Sleep(30000);
t.Abort();
Под «изящным вызовом для выхода» я имею в виду установить некоторую переменную остановки на какое-то значение и дать потоку некоторое время, чтобы выйти самому, иначе вы убьете его. Но это дизайн вашей функции потока, чтобы заставить ее фактически выйти. Вот пример кода:
Thread t = new Thread(myLongThreadProc);
threadRun = true;
t.Start();
Thread.Sleep(30000);
threadRun = false; //this variable is monitored by thread
if (!t.Join(1000)) //inside your thread, make sure it does quit in one second
{ //when this variable is set to false
t.Abort();
}
И должен ли я упомянуть, что потоку вызывающей стороны не нужно спать в течение 30 секунд, но вы можете вместо этого использовать таймер (если это поток формы) или сделать что-то полезное и периодически проверять - или просто иметь третий рабочий поток считая 30 секунд ...