【问题标题】:Calling click method of Forms from from another class in project从项目中的另一个类调用表单的单击方法
【发布时间】:2012-11-26 11:35:20
【问题描述】:

我有一个我写的应用程序。这个应用程序还有一个基本上是 HTTP 服务器的类。我在表单的 Load 函数中的一个单独线程中启动这个 Http 服务器。

    private void Form1_Load(object sender, EventArgs e)
    {
        HttpServer httpServer;
        httpServer = new MyHttpServer(8080);            
        Thread thread = new Thread(new ThreadStart(httpServer.listen));
        thread.Start();
    }

我现在遇到的问题是,我希望能够从请求进入的 HttpServer 类的函数中触发表单上某些按钮上的 Click 事件。我无法做到这一点,因为我没有在 HttpServer 类中引用正在运行的 Form1 的对象。

请帮我解决这个问题。

【问题讨论】:

  • HttpServer 不应该点击按钮。让它生成事件。现在很容易。

标签: c# .net winforms forms


【解决方案1】:

如果您决定在HttpServer 类中创建事件并订阅它们,请不要忘记事件处理程序的代码将在另一个线程中执行,因此请检查InvokeRequired 并使用Invoke/BeginInvoke 形式的方法。

【讨论】:

    【解决方案2】:

    将 Form1_Load 方法中的代码分解为一个 Service 类。从两个地方调用这个公共服务类。

    【讨论】:

      【解决方案3】:

      如果您没有对表单的引用,您可以制作一个。如果您出于各种原因不能这样做,可以将您在 Form 的方法中执行的操作提取到单独的类中,该类将由 Form 和系统的其他组件引用。

      【讨论】:

        【解决方案4】:

        在您的 httpServer 上使用事件并让表单订阅它们

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-13
          • 1970-01-01
          • 2014-07-07
          • 1970-01-01
          • 2018-05-08
          • 1970-01-01
          相关资源
          最近更新 更多