从另一个cs文件调用非静态void

时间:2014-06-09 00:10:29

标签: c#

我是C#的新手,我可能知道之前有人问过同样的事情。我在google上找到了一些信息,这里有关于stackoverflow的信息,但是我无法让它正常工作。

我需要调用非静态void(MainPage.cs / class MainPage)。

public async void UploadThat() 
        {
         .
         .
         .
         .
     Messagebox.Show("Hello there!");
        }

来自另一个cs文件(WebServer.cs)。

我试图在Webserver.cs文件中这样做:

using MainPage;
    .
    .
    .    
public MainPage test;

而不是致电:test.UploadThat();

它成功地编译了我的应用程序,但它不起作用。 提前谢谢..

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。以下是两个最常见的:

  • 直接调用方法;由于该方法不是静态的,因此需要引用MainPage实例。该实例可以传递给WebServer的构造函数,并存储为字段。请注意,这种方法会导致类之间的高度耦合,这通常是不可取的。

    WebServer.cs中的

    private readonly MainPage _mainPage;
    
    public WebServer(MainPage mainPage)
    {
        _mainPage = mainPage;
    }
    
    ...
    
        _mainPage.UploadThat();
    
    MainPage.cs中的

    WebServer ws = new WebServer(this);
    
  • WebServer课程中公开一个事件;让MainPage通过调用UploadThat来处理此事件;当WebServer想要致电UploadThat时,它只会举起活动,MainPage负责处理。这样,WebServer无需了解MainPage

    WebServer.cs中的

    public event EventHandler UploadRequested;
    private void OnUploadRequested()
    {
        EventHandler handler = UploadRequested;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
    
    ...
    
    // instead of calling UploadThat directly
    OnUploadRequested();
    
    MainPage.cs中的

    WebServer ws = new WebServer();
    ws.UploadRequested += ws_UploadRequested;
    
    ...
    
    private void ws_UploadRequested(object sender, EventArgs e)
    {
        UploadThat();
    }
    

作为旁注,除了事件处理程序或方法覆盖之外,您应该避免使用async void方法。 This article解释了原因。