Using OpenNETCF.Net.Ftp inside a class instead of inside a Windows Form
的完全重复到目前为止,我在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。
在上面的代码中“This”是一个表单。如果我将ftp对象隐藏在类中,如下所示:
abstract class MyClass
{
//data members
private FTP _ftp;
//other data members, methods, and properties etc
}
“这个”成为MyClass的一个对象。我不确定是否在类上实现了InvokeRequired属性(也许我应该让它实现一个具有该属性的特殊接口?)。或许我错过了一些东西,我不应该在类中使用多线程对象?
我在VS 2008中使用c#和asp.net 2.0。
答案 0 :(得分:1)
只需要在UI级别使用InvokeRequired和Invoke,以确保不与非UI线程上的控件交互。如果MyClass不是UI组件,那么您无需担心。
您可能需要担心的是MyClass与UI交互的时间。例如,如果MyClass将由于OnResponse而引发事件,并且UI将要观察该事件,那么在UI中的事件处理程序中,您将需要使用InvokeRequired和Invoke。