Почему бы не использовать темы?Это всегда хорошая идея, чтобы узнать что-то новое.
Вы можете просто поместить свой "длинный процесс" в фоновый поток и использовать события для отчета на уровне представления, например:
// in your "long process" class
public event Action<double> ReportCompletition;
// this method will start long process in separate background thread
public void Start()
{
Thread thread = new Thread(this.LongProcess);
thread.IsBackground = true;
thread.Start();
}
private void LongProcess()
{
// do something
// report 10% completition by raising event
this.ReportCompletition(0.1);
// do something more
this.ReportCompletition(0.5);
// ... and so on
}
Таким образом, все, что вам нужно сделать, это реализоватьпростой метод в вашей форме / пользовательском интерфейсе, который будет использовать эту информацию.
public partial class MainApplicationWindow : Form
{
private LongProcessClass _longProcess;
public MainApplicationWindow
{
this.InitializeComponent();
this._longProcess = new LongProcessClass();
// bind UI updating method to long process class event
this._longProcess.ReportCompletition += this.DisplayCompletitionInfo;
}
private void DisplayCompletitionInfo(double completition)
{
// check if control you want to display info in needs to be invoked
// - request is coming from different thread
if (control.InvokeRequired)
{
Action<double> updateMethod = this.DisplayCompletitionInfo;
control.Invoke(updateMethod, new object[] { completition });
}
// here you put code to do actual UI updating,
// eg. displaying status message
else
{
int progress = (int) completition * 10;
control.Text = "Please wait. Long process progress: "
+ progress.ToString() + "%";
}
}
Конечно, вы можете сообщать обо всем, что вам нравится, в течение длительного процесса.Будь то скорость завершения, готов к отображению строковых сообщений, что угодно.Вы также можете использовать события, чтобы сообщить о том, что длительный процесс завершился, прервался или о каких-либо длинных данных процесса, которые вы хотите.
Для получения более подробной информации по этой теме вы можете проверить учебники MSDN по Threading и События .