これまでのところ、Windowsフォーム内でFTPオブジェクトを使用しています。FTPオブジェクトは別のスレッドで実行されるため、アプリがフリーズしないようにするために、次のコードを使用します。
private void OnResponse(string response)
{
if (this.InvokeRequired)
{
this.Invoke(new StringDelegate(OnResponse), new object[] { response });
return;
}
} //end of OnResponse
文字列デリゲートが何であるかは完全にはわかりませんが、これは機能します。
しかし、私は現在リファクタリングを行っており、ftpをクラスに隠したいと思っています。私の質問は、メインスレッドがフリーズしないようにするにはどうすればよいですか?クラス内でイベントを発生させることに関するオンラインのすべての参照は理にかなっていますが、アプリケーションがマルチスレッド化されている例は1つも見つかりませんでした。私の最大の懸念はInvokeRequiredです。
上記のコードでは、これはフォームです。次のようなクラス内でftpオブジェクトを非表示にした場合:
abstract class MyClass
{
//data members
private FTP _ftp;
//other data members, methods, and properties etc
}
「これ」はMyClassの対象になります。InvokeRequiredプロパティがクラスに実装されているかどうかはわかりません(おそらく、そのプロパティを持つ特別なインターフェイスを実装する必要がありますか?)。または、何かが足りず、クラス内でマルチスレッドオブジェクトを使用することは想定されていませんか?