我有这个代码,我使用Xamarin应用程序。但我认为这是更好的地方,因为它更像是一个C#问题。我有一个应用程序,您可以在其中拍摄照片并将其添加到列表中并上传到服务器。下面的代码是用于上传图像的代码,每隔5秒运行一次计时器以向服务器发送图像(一旦获得OK响应,每次都这样做)它会从列表中删除图像,我是在过度使用应用程序后崩溃了,为什么会发生崩溃?
public App()
{
DB = new DataAccess(URL);
MainPage = new NavigationPage(new Landing()) { BarTextColor = Color.White };
Device.StartTimer(TimeSpan.FromSeconds(5), () =>
{
if (imagesToUpload.Count != 0)
{
CallFileToServer();
}
return true;
});
}
private async void CallFileToServer()
{
await SendFileToServer(imagesToUpload.FirstOrDefault().imageBytes, imagesToUpload.FirstOrDefault().shipmentNum);
}
private async Task SendFileToServer(byte[] image, string shipmentNumber)
{
try
{
Uri webService = new Uri(URL + "imageUpload/" + shipmentNumber);
using (var client = new HttpClient(new NativeMessageHandler()))
{
using (var content = new MultipartFormDataContent("----MyGreatBoundary"))
{
using (var memoryStream = new MemoryStream(image))
{
content.Add(new StreamContent(memoryStream), "file", Guid.NewGuid().ToString() + ".jpg");
using (var message = await client.PostAsync(webService, content))
{
string response = await message.Content.ReadAsStringAsync();
if (message.ReasonPhrase.ToLower() == "OK".ToLower())
{
imagesToUpload.Remove(imagesToUpload.FirstOrDefault(f => f.imageBytes == image));
}
}
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
这是将图像添加到列表代码中,但是我事先已经提出了类似的问题而且我被告知这很可能不是问题。
using (var memoryStream = new MemoryStream())
{
file.GetStream().CopyTo(memoryStream);
App.imagesToUpload.Add(new ImageToUpload
{
imageBytes = memoryStream.ToArray(),
shipmentNum = Result.ToString(),
imageData = ImageSource.FromFile(file.Path)
});
tempCollection.Add(new TempImage
{
imgSource = ImageSource.FromFile(file.Path)
});
file.Dispose();
memoryStream.Dispose();
}
一旦提交表单,就会清除TempCollection,以便列表不是问题。
提前致谢!
答案 0 :(得分:0)
我发现您每次上传文件时都会实例化一个新的HttpClient。 虽然HttpClient是一次性的,但您应该尽可能多地重用一个HttpClient实例。 有关详细信息,请参阅this文章。
我不知道这是否是您出现问题的原因,因为您对所出现的确切问题一无所知,但您可能会试一试。