Я работаю над приложением Windows Mobile 6.1, написанным на C#. Недавно я добавил возможность делать фотографии. Устройство представляет собой Intermec CN50. Этот код отлично работает, если я открываю приложение и перехожу непосредственно к биту, который снимает фотографии. Однако, если я пройду через несколько других экранов, а затем откройте бит фотографии, он завершится неудачно с невероятно полезным сообщением «Неизвестная ошибка». В исключении, которое я вижу, нет другой полезной информации. Код не будет работать на этой линии:CameraCaptureDialog завершается с ошибкой «Неизвестная ошибка»
cameraResult = cameraDialog.ShowDialog();
Вот трассировки стека:
at Microsoft.WindowsMobile.Forms.CameraCaptureDialog.LaunchCameraCaptureDialog(IntPtr ptrStruct)
at Microsoft.WindowsMobile.Forms.CameraCaptureDialog.ShowDialog()
at MicronetMobileUi.Controls.Camera.ShowDialog(Form owner, String& fileName)
at MicronetMobileUi.FieldService.JobImagesForm.LoadCameraScreen()
at MicronetMobileUi.FieldService.JobImagesForm.footerToolbar_ItemEntered(Object sender, EventArgs e)
at Resco.Controls.CommonControls.ToolbarControl.OnItemEntered()
at Resco.Controls.CommonControls.ToolbarControl.MouseClickUp(MouseEventArgs e)
at Resco.Controls.CommonControls.ToolbarControl.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.ContainerControl.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at MicronetMobileUi.ApplicationManager.StartApp()
at MicronetMobileUi.Program.Main()
Вот код:
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
var fileName = "temp.jpg";
var pathAndFileName = Path.Combine(path, fileName);
var cameraDialog = new CameraCaptureDialog();
cameraDialog.Owner = this;
cameraDialog.InitialDirectory = path;
cameraDialog.DefaultFileName = fileName;
cameraDialog.Mode = CameraCaptureMode.Still;
cameraDialog.StillQuality = CameraCaptureStillQuality.Low;
cameraDialog.VideoTimeLimit = new TimeSpan(0, 0, 0);
cameraDialog.VideoTypes = CameraCaptureVideoTypes.Messaging;
cameraDialog.Resolution = new Size(640, 480);
// open camera dialog to take a photo
DialogResult cameraResult;
try
{
cameraResult = cameraDialog.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show("Grrrr!!");
}
finally
{
cameraDialog.Dispose();
cameraDialog = null;
}
if (cameraResult != DialogResult.OK)
return; // no photo was taken
// save photo using this value: pathAndFileName ...
Я предполагаю, что это что-то делать с недостаточно памяти, но Я действительно не знаю. До сих пор я пробовал:
1) Instationing CameraCaptureDialog, когда приложение запускается, поэтому оно может получить некоторую память.
2) Instationing CameraCaptureDialog, а также вызов ShowDialog() при первом запуске приложения.
3) Закрытие моего подключения к локальной базе данных SQL CE до создания экземпляра CameraCaptureDialog (это было предложено на форуме).
4) Запуск GC.Collect() перед созданием экземпляра (да, я знаю, что это обычно не хорошая идея).
5) Снижение cameraDialog.Resolution до всего 320 на 240.
ничего не работает. Я потратил годы, добавляя эту функциональность в свое приложение, и теперь я нахожу, что он работает только на самом деле. Windows Mobile может быть очень раздражающим. Помогите!!
Вы когда-нибудь находили решение? У меня такая же проблема, и это заставляет наших разработчиков безумных ... –