2012-06-13 13 views
2

C#으로 작성된 Windows Mobile 6.1 응용 프로그램에서 작업하고 있습니다. 나는 최근에 사진을 찍을 수있는 능력을 추가했다. 이 장치는 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) 앱이 처음 시작될 때 CameraCaptureDialog를 설치하면 메모리가 확보 될 수 있습니다.

2) CameraCaptureDialog를 설치하고 앱을 처음 시작할 때 ShowDialog()를 호출합니다.

3) CameraCaptureDialog를 인스턴스화하기 전에 로컬 SQL CE 데이터베이스에 대한 연결을 끊습니다 (포럼에서 제안 되었음).

4) 인스턴스를 생성하기 전에 GC.Collect()를 실행하면 (예 : 일반적으로 좋은 생각이 아닙니다.)

5) (240)

아무것도에 의해 단지 320 cameraDialog.Resolution 감소 작동합니다. 나는이 애플 리케이션에이 기능을 추가하는 데 시간을 보냈다. Windows Mobile은 심각하게 짜증나게 할 수 있습니다. 도움!!

답변

0

나는 어떤 종류의 대답을 발견했다고 생각합니다.

1) 로컬 SQL CE 데이터베이스에 대한 전역 연결을 닫는 코드를 추가했습니다. 이것은 포럼에서 제안되었습니다.

2) 또한 tcarvin에서 제안한 바코드 개체를 처리 할 코드를 추가했습니다. 그러나 나는 때때로 오류를 경험하고 있었다.

3) 그런 다음 Visual Studio에 연결된 장치로 디버깅 할 때 오류가 발생하는 것으로 나타났습니다. 정상적인 사용자가 사용하는 방식으로 사용하고 있다면 괜찮습니다. 나는 확실히

UPDATE

지금 응용 프로그램을 고객에게 배포 된이 문제가 계속 일어나고있는 것 같다 ... 그래서 어쨌든 바랍니다. 또한 때로는 카메라 화면을로드하고 사진을 찍을 수도 있지만 Windows에는 "파일을로드 할 수 없습니다"라는 메시지가 표시됩니다. 그들은 응용 프로그램을 다시 시작한 다음 작동하지만 사진을 찍을 때마다 그렇게 할 것이라고 기대할 수는 없습니다.그래서 내가 지금있는 솔루션에 대해 조금 애매 해요

이 얼마 전에 일어난 인터멕이 도울 수 있다면 나는

후 업데이트 ... 볼 수 있습니다. 나는 실제로 그 일을 떠났고 코드를 볼 수 없습니다. 결국 Intermec에서 문제를 해결 한 compononet (DLL이라고 생각합니다)이 있습니다.

+0

당신은 이것에 대한 해결책을 찾았습니까? 비슷한 문제가있어서 개발자들이 정신 나간 ... –

1

CN50에는 없지만 다른 Intermec 장치에서 비슷한 문제가 발생했습니다. 바코드 스캐너/디코더와 카메라가 동시에 액세스 할 수없는 공통 인프라를 공유했기 때문에 바코드가 나왔습니다.

바코드 개체를 주석 처리하거나 조롱하고 앱을 탐색 한 후 카메라를 활용할 수 있는지 확인해보십시오.

+0

대단히 감사합니다. 이 작업을 수행하는 코드를 추가했습니다. 그것이 문제를 완전히 해결했는지 여부는 확실하지 않습니다. 나는 아직도 물건들을 시험하고있다. –

0

이 파괴되는 이유 때문에 그나마 카메라가 지원하지 않는 해상도를 설정

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

이 라인입니다 - 당신이 ShowDialog를 할 때() 실패합니다

지원되는 해상도는 수 그림 & video 앱> 메뉴> 옵션> 해상도 드롭 다운을 실행하여 찾을 수 있습니다.

이러한 해상도 중 하나를 설정하면 제대로 작동합니다. (CN51에서 테스트 중이며 112x160을 사용했습니다).

- 지원되는 장치 해상도는 어딘가에 있으며 장치마다 다를 수 있습니다. 코드가 여러 장치에서 실행되는 경우이 문제를 해결하는 가장 좋은 방법은 해상도를 설정하지 않는 것입니다 (마지막에 사용 된 것이나 장치의 기본값으로 간주됩니다).

이미지를 항상 약간의 크기로 만들려면; 해상도를 설정하지 말고 사진을 찍은 다음 이미지를 좀 더 작은 것으로 사후 처리하십시오. 이와 비슷한 것을 사용하십시오 some re-size example

희망이 있으면 나중에 도움이 될 것입니다.

관련 문제