Пока что я использую объект FTP внутри формы Windows. FTP-объект работает в отдельном потоке, поэтому, чтобы мое приложение не зависало, я использую следующий фрагмент кода:
private void OnResponse(string response)
{
if (this.InvokeRequired)
{
this.Invoke(new StringDelegate(OnResponse), new object[] { response });
return;
}
} //end of OnResponse
Мне не совсем ясно, что такое делегат строки, но это работает.
Однако я сейчас занимаюсь рефакторингом и хочу спрятать ftp в класс. Мой вопрос: как мне убедиться, что основной поток не зависает? Все ссылки в Интернете, касающиеся создания событий внутри классов, имеют смысл, но я не нашел ни одного примера, где приложение является многопоточным. Моя самая большая проблема была бы InvokeRequired.
В приведенном выше коде это форма. Если я прячу объект ftp внутри класса, такого как следующий:
abstract class MyClass
{
//data members
private FTP _ftp;
//other data members, methods, and properties etc
}
«Это» становится объектом MyClass. Я не уверен, реализовано ли свойство InvokeRequired в классе (возможно, я должен заставить его реализовать специальный интерфейс, который имеет это свойство?). Или, может быть, я что-то упускаю и не должен использовать многопоточные объекты внутри классов?