我是使用回调和异步函数的新手,所以我有点不确定解决这个问题的最佳方法。
我创建了一个SendPhoto()
由我的 GUI 调用的函数。该SendPhoto()
函数与我的 GUI 位于一个单独的类中。
public string SendPhoto(string filename)
{
byte[] response = PostFile(_url, filename);
String responsestring = Encoding.ASCII.GetString(response);
if (responsestring.StartsWith("ERROR:"))
return responsestring;
else if (responsestring.Contains("<valid>1</valid>"))
return "OK";
else
return responsestring;
}
我的PostFile()
函数曾经调用WebClient.UploadFile()
,响应返回到SendPhoto()
,效果很好。然后我决定要异步发送照片,所以在我的PostFile()
函数中,我将调用从 更改Uploadfile()
为UploadFileAsync()
。
但是,我意识到它UploadFileAsync()
不会返回值,并且我必须使用 UploadFileCompletedEventHandler 来在完成上传后获取响应。所以,我在同一个类中编写了一个回调函数SendPhoto()
来PostFile()
检索响应,在该函数上实例化一个 UploadFileCompletedEventHandler,并将它传递给我的PostFile()
函数。
问题是我不确定如何将响应返回给SendPhoto()
函数,以便它可以解释响应并将友好的响应发送回 GUI。以前,当一切都是同步的时,响应只是传回堆栈,但现在,响应又被删除了几层。
将响应从回调函数返回到 的最佳方法是什么SendPhoto()
,现在PostFile()
不能再将它返回给我?我想将事件处理程序回调移动到 GUI 并传递UploadFileCompletedEventHandler
to SendPhoto()
,然后将其发送到PostFile()
. 但我试图将“业务逻辑”(即解释响应)排除在 GUI 类之外。