내 응용 프로그램을 실행할 때 라이브 사진을 찍을 지 또는 사용할 수없는 사진인지 결정하기 전에 지정된 URI의 사진을 사용할 수 있는지 알아야합니다.동기식으로 사진 가져 오기 (우리에서)
그림이 한 번만 설정되기 때문에 그림에 액세스 할 수 있고 손상되지 않았 으면 동 기적으로 알 필요가 있습니다. Reactive Extensions로 시도했지만 첫 번째 요소를 가져올 수 없었습니다. (.First() 문에서 전체 응용 프로그램이 멈 춥니 다)
다음 코드는 blogger이지만 코드는 컴파일되지 않았습니다. Reactive가 새로운 구문을 사용하는 것과 관련이 있다고 생각합니다. 게다가, Reactive는 여전히 Silverlight 5를 사용하고 있으며, 여전히 비정상적인 동작을하고 있을지도 모릅니다.
나는 다른 가능한 솔루션에 개방,하지만 나를 위해 더 나은 솔루션은에서는 WebClient 클래스에 OpenRead() 확장 메서드를 생성 할 수있을 것입니다,이처럼 사용 :
var pictureStream = new WebClient().OpenRead(_uri);
if (pictureStream != null)
{
var picture = new BitmapImage();
picture.SetSource(picture);
return picture;
}
else
{
//Picture is unavailable
}
고마워요!
Silverlight에서 동기식 I/O 호출을 잊어 버릴 수도 있습니다. 허용되지 않습니다. 그리고 이것은 좋은 일입니다. 마이크로 소프트는 사람들이 입출력 작업을 수행 할 때마다 얼어 버리는 쓰레기 소프트웨어를 쓰는 것을 피하기 위해 고의적으로 만 비동기 버전의 메소드를 남겼다. 비동기식 프로그래밍에 익숙해지기 만하면됩니다. C# 5.0에는 새로운 async/await 키워드가있어 동기식으로 보이지만 코드 작성자가 실제 비동기 비 블로킹 호출을 수행하는 데 필요한 모든 배관을 생성합니다. –
글쎄, 실제로 비동기 호출을 가짜로 생각하고 있었는데 이것은 Reactive Extensions가 디자인 한 것과 정확히 일치한다. 그래서 어떤면에서는 가능하다고 생각한다. 내 전체 응용 프로그램은 비동기로 설계되었지만 현재이 함수에서 정보를 알 필요가있는 곳입니다. 기능을 기다리는 것은 의심 할 여지없이 일을 할 것입니다 ... – Philippe
@Philippe - Rx는 이벤트 및 비동기 작업을 추상화하는 것입니다. '.First()'(또는 그 자매 차단 함수)를 사용한다면 올바른 일을하지 않을 가능성이 있습니다. 당신의 접근 방식을 다시 생각해 보길 권합니다. – Enigmativity