在自定义类中使用OpenNETCF.Net.Ftp而不是在Windows窗体内

时间:2009-05-22 18:35:03

标签: c# multithreading events compact-framework

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。

1 个答案:

答案 0 :(得分:1)

只需要在UI级别使用InvokeRequired和Invoke,以确保不与非UI线程上的控件交互。如果MyClass不是UI组件,那么您无需担心。

您可能需要担心的是MyClass与UI交互的时间。例如,如果MyClass将由于OnResponse而引发事件,并且UI将要观察该事件,那么在UI中的事件处理程序中,您将需要使用InvokeRequired和Invoke。