Я бы настроил обработчик событий таким же образом, но в методе Calls_Calls_MouseUp
вы можете запустить поток для выполнения работы:
private void Calls_Calls_MouseUp(object sender, MouseEventArgs e)
{
ThreadPool.QueueUserWorkItem(state => {
// do the work here
});
}
Однако обычно я пытаюсь получить событиеобработчики настолько незаметны, насколько это возможно, просто вызывая какой-то другой метод, часто основанный на некотором условии:
private void Calls_Calls_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DoSomething();
}
}
private void DoSomething()
{
ThreadPool.QueueUserWorkItem(state => {
// do the work here
});
}
Это дает вам возможность вызывать точно такое же поведение из чего-то другого, чем событие MouseUp
в определенномконтроль (так что вы можете иметь такое же поведение на элемент меню, кнопку на панели инструментов и, возможно, обычную кнопку команды).Это также может открыть возможность проведения модульных тестов функциональности (хотя это несколько сложнее с асинхронным кодом).