到目前为止,我在 Windows 窗体中使用 FTP 对象。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
}
"This" 成为 MyClass 的一个对象。我不确定是否在类上实现了 InvokeRequired 属性(也许我应该让它实现一个具有该属性的特殊接口?)。或者也许我遗漏了一些东西,我不应该在类中使用多线程对象?