Если LookForItWhichMightTakeALongTime()
займет много времени, я бы посоветовал не использовать System.Windows.Forms.Timer
, потому что это заблокирует ваш поток пользовательского интерфейса, и пользователь может убить ваше приложение, думая, что оно заморожено.
Вы можете использовать BackgroundWorker
(вместе с Timer
, если хотите).
public class MyForm : Form
{
private BackgroundWorker backgroundWorker = new BackgroundWorker();
public MyForm()
{
InitializeComponents();
backgroundWorker.DoWork += backgroundWorker_DoWork;
backgroundWorker.RunWorkerCompleted +=
backgroundWorker_RunWorkerCompleted;
backgroundWorker.RunWorkerAsync();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = LookForItWhichMightTakeALongTime();
}
private void backgroundWorker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
found = e.Result as MyClass;
}
}
И вы можете позвонить на номер RunWorkerAsync()
из любой точки мира, если хотите, даже с номера Timer
. И просто убедитесь, что BackgroundWorker
уже запущен, так как вызов RunWorkerAsync()
во время его работы вызовет исключение.
private void timer_Tick(object sender, EventArgs e)
{
if (!backgroundWorker.IsBusy)
backgroundWorker.RunWorkerAsync();
}