代码之家  ›  专栏  ›  技术社区  ›  sarsnake

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

  •  0
  • sarsnake  · 技术社区  · 15 年前

    完全复制 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隐藏到类中。我的问题是如何确保主线程不会冻结?所有关于在类中引发事件的在线引用都是有意义的,但是我还没有找到一个应用程序是多线程的例子。我最担心的是被要求。

    在上面的代码中,“This”是一个表单。如果我将ftp对象隐藏在类中,例如:

    abstract class MyClass
    {
        //data members
        private FTP _ftp;
    
        //other data members, methods, and properties etc
    }
    

    “This”成为MyClass的一个对象。我不确定是否在类上实现了InvokeRequired属性(也许我应该让它实现一个具有该属性的特殊接口?)。或者也许我遗漏了一些东西,我不应该在类中使用多线程对象?

    我正在使用c#和asp.net 2.0与VS 2008。

    1 回复  |  直到 7 年前
        1
  •  1
  •   David Nelson    15 年前

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