私はC#で書かれたWindowsMobile6.1アプリに取り組んでいます。最近、写真を撮る機能を追加しました。デバイスはIntermecCN50です。このコードは、アプリを開いて写真を撮るビットに直接移動すると正常に機能します。ただし、他のいくつかの画面を表示してからフォトビットを開くと、「不明なエラーが発生しました」という非常に便利なメッセージが表示されて失敗します。私が見ることができることを除いて、他の有用な情報はありません。コードは次の行で失敗します:
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)アプリが最初に起動したときに、CameraCaptureDialogを開始して、メモリを取得できるようにします。
2)CameraCaptureDialogを開始し、アプリの最初の起動時にShowDialog()を呼び出します。
3)CameraCaptureDialogをインスタンス化する前に、ローカルSQL CEデータベースへの接続を閉じます(これはフォーラムで提案されました)。
4)インスタンス化する前にGC.Collect()を実行します(はい、これは通常は良い考えではないことを私は知っています)。
5)cameraDialog.Resolutionを320x240に減らします。
何も機能しません。私はこの機能をアプリに追加するのに何年も費やしましたが、今では実際にはたまにしか機能しないことがわかりました。Windows Mobileは、非常に煩わしい場合があります。ヘルプ!!