Search Results for 'Silverlight 2/Migration from 1.1'


6 POSTS

  1. 2008/03/25 웹서비스 호출
  2. 2008/03/25 Navigate 메서드
  3. 2008/03/08 Downloader 대신 WebClient (1)
  4. 2008/03/06 HtmlTimer 대신 뭘 쓰면 될까요? (2)
  5. 2008/03/06 Image.Source는 어떻게 쓰나
  6. 2008/03/06 BrowserHost야 어딜 간거니??? (2)

웹서비스 호출

Posted 2008/03/25 10:53 by 길버트
실버라이트 1.1

어디선가 아래와 같이 비동기 호출을 하면, 가수 '비'의 동기가 나오지는 않죠? (^^;;; 죄송합니다.)

// mySvc : 웹 레퍼런스로 등록한 이름
mySvc.MyWebService1 svc = new mySvc.MyWebService1();
AsyncCallback cb = new AsyncCallback(MyMethodCallback);
svc .BeginMyMethod(myParam1, myParam2, ... , cb, svc);

메서드가 수행된 후 아래와 같이 비동기 호출 콜백 함수(MyMethodCallback)가 수행되면서
EndMyMethod로부터 수행 결과를 받아써야 했습니다.

public void MyMethodCallback(IAsyncResult ar)
{
    // mySvc : 웹 레퍼런스로 등록한 이름
    mySvc.MyWebService1 pf = (mySvc.MyWebService1)ar.AsyncState;

    // 수행 결과

    string[] array = pf.EndMyMethod(ar);
    ShowResult(array);
}

실버라이트 2

실버라이트 2에서는 이벤트 방식으로 변경이 되어, 일관성 있어지고, 사용이 쉬워졌습니다.

일단 Web Reference 가 Service Reference로 개념이 바뀌었습니다.
만든 Web Service를 Add Service Reference 하셔서 쓰시면 됩니다.

자신이 등록한 WebService Class 이름을 namespace로 하는 *SoapClient 인스턴스를 만들어 사용합니다.

// MyWSProject : 웹서비스 프로젝트 네임스페이스
// MyWSClass : 웹서비스 클래스

mySvc.MyWSClassSoapClient svc = new mySvc.MyWSClassSoapClient ();
svc.MyMethodCompleted += new EventHandler<MyWSProject.MyWSClass.MyMethodCompletedEventArgs>(_svc_MyMethodCompleted);
svc.MyMethodAsync(myParam1, myParam2, ...);

그럼 아래 이벤트 핸들러에서 결과를 받아서 씁니다.

void svc_MyMethodCompleted(object sender, MyWSProject.MyWSClass.MyMethodCompletedEventArgs e)
{
    // 수행 결과 에러 또는 취소 판단이 가능 
    if (e.Error != null || e.Cancelled == true)
        return;

    // 수행 결과 (e.Result)
    ShowResult(e.Result.ToArray());
}


 

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Silverlight2, 실버라이트2, 웹서비스

코멘트를 남겨 주세요. (Write your message and submit)

Navigate 메서드

Posted 2008/03/25 10:11 by 길버트
실버라이트 1.x

HtmlPage.Navigate("http://hugeflow.com", "_blank");

실버라이트 2

HtmlPage.Window.Navigate(new Uri("http://hugeflow.com", UriKind.Absolute), "_blank");

네임스페이스는 그대로 유지되었습니다.

using System.Windows.Browser;

이미 많은 분들이 알고 계시지만, 정리되어 올라온 곳이 적은 것 같아서...

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : navigate, Silverlight, 실버라이트

코멘트를 남겨 주세요. (Write your message and submit)

Downloader 대신 WebClient

Posted 2008/03/08 11:13 by 길버트
Silverlight2 에서 Downloader가 사라졌습니다.
대신에 WebClient를 사용하시면 됩니다.

파일 전송을 위한 메서드로
OpenReadAsync과 DownloadStringAsync 두가지를 지원합니다.

OpenReadAsync

WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri("song.wma", UriKind.Relative));

이벤트 핸들러는 다음과 같이 사용합니다. (e.Result는 Stream)

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    MediaElement media = new MediaElement();
    media.SetSource(e.Result);

    LayoutRoot.Children.Add(media);
    media.Play();
}


DownloadStringAsync

특히 받아올 파일이 xml파일 등 Text 형식이면 이 메서드를 씁니다.

WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("data.xml", UriKind.Relative));


이벤트 핸들러는 다음과 같이 사용합니다. (e.Result는 String)

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    XmlReader xr = XmlReader.Create(new StringReader(e.Result));

    //...
}

네임스페이스

using System.Net;

zip파일로 Packaging 해 놓고 Part를 뽑아 쓸 경우는 Microsoft Silverlight 2 SDK Help의

Microsoft Silverlight 2 SDK
 - Silverlight 2 Beta 1 - Development with the .NET Framework
    - Core Presentation Framework / UI 
       - Fundamentals
          - Downloading Content on Demand

부분을 참고 하시기 바랍니다.
 

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Downloader, Silverlight2, WebClient, 마이그레이션, 실버라이트2

  1. BlogIcon 길버트

    제가 중간에 잘못 적은 내용이 있었네요.

    media.SetSource = e.Result 를
    media.SetSource(e.Result) 로 수정하였습니다.

    | 2008/03/21 17:24 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

HtmlTimer 대신 뭘 쓰면 될까요?

Posted 2008/03/06 21:06 by 길버트
Silverlight 2에서 HtmlTimer가 사라졌습니다.

System.Threading.Timer도 있고 System.Windows.Threading.DispatcherTimer도 있는데
이제 무얼 쓸까요?

HtmlTimer를 쓰시던 분은 DispatcherTimer를 사용하실 것을 권합니다.
사용방법이 똑같아서 변수 선언부만 찾아서 고치시고, Interval을 TimeSpan으로 수정하시면
컴파일 에러가 해결될 거예요.

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(3000); // 3초
timer.Tick += new EventHandler(timer_Tick);
timer.Start();

HtmlTimer에는 아래와 같이 Obsolete가 선언되어 있어서 ,
컴파일 할 때마다 경고 뜨는게 보기 싫으셨죠?

[Obsolete("This is not a high resolution timer and is not suitable for short-interval animations. A new timer type will be available in a future release.")]
public class HtmlTimer : IDisposable

이제 경고 받으시지 않으셔도 됩니다. ^^
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : 1.1 마이그레이션, DispatcherTimer, HtmlTimer, Silverlight2, 실버라이트2

  1. BlogIcon 테디

    헉.. 달리시네요.. ^^

    | 2008/03/06 22:09 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    정태호MVP님도 같이 달려주세요!

    | 2008/03/11 00:49 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

Image.Source는 어떻게 쓰나

Posted 2008/03/06 20:15 by 길버트
이미지 사용하기가 조금 복잡해졌어요.

Image image = new Image();
image.Source = new BitmapImage(new Uri("http://hugeflow.com/HFLogo.jpg", UriKind.Absolute));

하지만 의미를 찾자면 BitmapImage에 DownloadProgress이벤트가 있다는 것!
이제 이미지가 다 받아졌는지 확인 할 때 Timer 안 써도 된다는 것!

Image image = new Image();
BitmapImage bitmap = new BitmapImage(new Uri("http://hugeflow.com/HFLogo.jpg", UriKind.Absolute));
bitmap.DownloadProgress += new DownloadProgressEventHandler(bitmap_DownloadProgress);

이벤트 핸들러

void bitmap_DownloadProgress(object sender, DownloadProgressEventArgs e)
{
    BitmapImage bitmap = sender as BitmapImage;

    if (e.Progress == 1)
    {
         // 다 받아졌다!
    }
}


네임스페이스

using System.Windows.Media.Imaging;
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : 1.1마이그레이션, BitmapImage, image, Silverlight2, 실버라이트2

코멘트를 남겨 주세요. (Write your message and submit)

BrowserHost야 어딜 간거니???

Posted 2008/03/06 19:57 by 길버트
BrowserHost.Resize 이벤트를 많이 애용했었지요.

BrowserHostApplication.Current.Host.Content로 대체됩니다.

Resized 이벤트는 이렇게

Application.Current.Host.Content.Resized += new EventHandler(Content_Resized);


void Content_Resized(object sender, EventArgs e)
{
    Width = Application.Current.Host.Content.ActualWidth;
    Height = Application.Current.Host.Content.ActualHeight;
}

IsFullScreen도 여기서 찾을 수 있습니다.

Application.Current.Host.Content.IsFullScreen


네임스페이스는 아래 것을 사용합니다.

using System.Windows;



이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : 1.1마이그레이션, Application.Current.Host.Content, BrowserHost, IsFullScreen, resize, Silverlight2, 실버라이트2

  1. 배정민

    좋은 정보 고맙습니다 ^^

    | 2008/06/25 16:30 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    네~ 천만에요! :)

    | 2008/06/26 11:29 | PERMALINK | EDIT |
코멘트를 남겨 주세요. (Write your message and submit)