2

私はC#で書かれたWindowsMo​​bile6.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は、非常に煩わしい場合があります。ヘルプ!!

4

3 に答える 3

1

CN50を使用していないときに、別のIntermecデバイスで同様の問題が発生しました。バーコードスキャナー/デコーダーとカメラは共通のインフラストラクチャを共有しているため、同時にアクセスしてはならないことが判明しました。

バーコードオブジェクトをコメントアウトまたはモックアウトしてみて、アプリをナビゲートした後にカメラを利用できるかどうかを確認してください。

于 2012-06-13T13:50:29.813 に答える
0

なんらかの答えを見つけたと思います。

1)ローカルSQLCEデータベースへのグローバル接続を閉じるためのコードを追加しました。これはフォーラムで提案されました。

2)tcarvinによって提案されたように、バーコードオブジェクトを破棄するコードも追加しました。しかし、私はまだ時々エラーを経験していました。

3)次に、Visual Studioに接続されたデバイスでデバッグしているときにのみ、エラーが発生するように見えることに気付きました。通常のユーザーが使用する方法で使用している場合は、問題ないようです。とにかくそう願っています...

アップデート

これでアプリが顧客にデプロイされ、問題はまだ発生しているようです。また、カメラの画面を読み込んで写真を撮ることができる場合もありますが、Windowsは「エラーはファイルを読み込めません」などのメッセージを表示します。彼らがアプリケーションを再起動すると、それは機能しますが、写真を撮りたいと思うたびにそれを行うことは期待できません。インターメックが役立つかどうかを確認します...

さらなる更新:

これは少し前に起こったので、私は今見つけた解決策について少し漠然としています。私は実際にその仕事を辞めたので、今はコードを見ることができません。結局、問題を解決したコンポノネット(DLLだと思います)をIntermecから入手しました。

于 2012-06-15T06:28:37.697 に答える
0

これが壊れている理由はこの線のためです

cameraDialog.Resolution = new Size(640, 480);

カメラがサポートしていない解像度を設定しないでください-ShowDialog()を実行すると失敗します

サポートされている解像度は、[画像とビデオアプリ]>[メニュー]>[オプション]>[解像度]ドロップダウンを実行して確認できます。

これらの解像度の1つを設定すると、正常に機能します。(私はCN51でテストしており、112x160を使用しました)。

-デバイスでサポートされている解像度は、どこかにあるレジストリ設定であり、デバイスごとに異なります。コードが複数のデバイスで実行されると想定される場合、これを処理する最善の方法は、解像度を設定しないことです(最後に使用されたもの、またはデバイスのデフォルトと見なされるものを使用します)。

画像を常に一定のサイズにしたい場合。解像度を設定しないでください->写真を撮ってください->次に画像をより小さなものに後処理してください。このようなサイズ変更の例を使用する

これが将来誰かに役立つことを願っています。

于 2014-10-20T19:04:51.070 に答える