2014-09-03 8 views
2

주변 조명에 따라 동작이 변경되는 간단한 응용 프로그램을 작성하고 있습니다. 앱이 잘 돌아가고 있으며 럭스 값이 디스플레이에서 업데이트됩니다. 문제는 내가 ui 객체의 불투명도를 변경하면 더 이상 센서 업데이트를 얻지 못한다는 것입니다. WP8.1에 익숙하지 않아이 문제를 스레딩 문제로 생각하고 많은 것을 이해하려고 노력했습니다.UI로 작업 할 때 스레드가 멈추는 이유

비슷한 예 :

 void OnLightSensorReadingChanged(Windows.Devices.Sensors.LightSensor sender, Windows.Devices.Sensors.LightSensorReadingChangedEventArgs args) 
     { 
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      LuxReading.Text = "Lux: " + args.Reading.IlluminanceInLux.ToString(); 
      ); 
     } 

나는 것을 볼 수 있습니다 : 내가 읽고 업데이트 센서를 얼마나

// Get the ambient light sensor up and running. 500ms interval. 
    var sensor = Windows.Devices.Sensors.LightSensor.GetDefault(); 
    if (sensor == null) 
    { 
     return; 
    } 
    sensor.ReportInterval = 500; 
    sensor.ReadingChanged += OnLightSensorReadingChanged; 

이것은 : http://developer.nokia.com/community/wiki/Using_Windows_phone_8.1_light_sensor

이것은 내가 센서를 초기화하는 방법입니다 스레드는 센서 값이 변경 될 때마다 생성되고 종료됩니다. 수치

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    mypicture.Opacity = 0.5; 
} 

내가 무엇을 놓치고를 동결 나는 UI에서 할

아무것도? Dispatcher를 사용하여 불투명도를 변경해야합니까?

답변

0

이것은 실제 답변이 아닙니다. 코드가 처음부터 괜찮 았는지 확인하는 것입니다. 이제 작동합니다. 나는 왜 그것이 전에는 효과가 없었는지 모르지만 지금은 그렇지 않습니다. 나는 또한 그래서 여기에 코드를 일부 변경 한 작업 예제 : 실제 센서를 만들기

public sealed partial class MainPage : Page 
{ 
    LightSensor sensor; 
... 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // Get the ambient light sensor up and running. 500ms polling interval. 
    sensor = LightSensor.GetDefault(); 
    sensor.ReportInterval = 500; // optional, make sure it's above minreportinterval 
    sensor.ReadingChanged += sensor_ReadingChanged; 
    if (sensor == null) 
    { 
     return; 
    } 
} 

이벤트 (별도의 스레드)

private void sensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args) 
{ 

    Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
    () => 
    { 
     LuxReading.Text = "Lux: " + args.Reading.IlluminanceInLux.ToString(); 
     UiUpdate();  
    } 
    ); 

} 

가 포함되어 있지 않습니다하지만 응용 프로그램에서 탐색 기본값이 아닌 값을 사용하는 경우 ReportInterval을 0으로 설정해야합니다.

모든 도움에 감사드립니다.

+0

정보를 제공해 주셔서 감사합니다. (더 이상 필요하지 않으므로 답변을 삭제했습니다). 단지 발언 :'OnNavigatedTo '를주의하십시오 - 앱 재개시 호출되지 않습니다. 따라서 예를 들어 앱이 일시 중지되면 센서를 'OnNavigatingFrom'에서 해제합니다. 예를 들어 MS 버튼을 누르거나 앱을 변경하거나 다른 앱으로 돌아 가면 이벤트가 시작되지 않습니다. 디버깅 모드에서는 작동하지만 앱은 일시 중지되지 않고 VS 외부에서 앱을 실행하여 테스트합니다. 또는 [디버거를 사용하여 테스트 일시 중단] (http://stackoverflow.com/a/24103734/2681948) – Romasz

+0

위의 주석은 WP8.1 RT가 아닌 Silverlight에 관한 것입니다. – Romasz

관련 문제