繁体   English   中英

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

[英]Calling non-static void from another cs file

我是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();

它成功编译了我的应用程序,但无法正常工作。 提前致谢..

有几种解决方法。 这是最常见的两个:

  • 直接调用该方法; 由于该方法不是静态的,因此需要引用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方法。 本文解释了原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM