我是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();
它成功地编译了我的应用程序,但它不起作用。 提前谢谢..
答案 0 :(得分:1)
有几种方法可以解决这个问题。以下是两个最常见的:
直接调用方法;由于该方法不是静态的,因此需要引用MainPage
实例。该实例可以传递给WebServer
的构造函数,并存储为字段。请注意,这种方法会导致类之间的高度耦合,这通常是不可取的。
:
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
。
:
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解释了原因。