Quantcast
Channel: Windows Mobile – .NET Compact Framework (VB, C#) フォーラム
Viewing all articles
Browse latest Browse all 80

.NET compact framework でのInvokeの実装方法について教えてください

$
0
0

いつもお世話になっております。

今回、WebRequest.BeginGetResponse メソッド を利用して非同期でネットワークから画像データを取得し、それを既存のPanelクラスに貼り付けようとしています。

最初は安直にHandleEventを使用して既存クラスにコールバックしたのですが、Pictureboxを貼り付けるときに以下のExeptionが発生しました。

「別のスレッドで作成されたコントロールと対話するには、Control.Invoke を使用してください。」

そこでInvokeを使用して処理を渡してあげようとしたのですが、MSDNのリファレンスに

「.NET Compact Framework アプリケーションでは、デリゲートは EventHandler のインスタンスである必要があります。」

とありますが、EventHandlerを呼び出し元&コールバック先でどのように宣言して、それをDelegateクラスとしてInvokeをコールすればいいのかいまひとつ理解できません。以下のように試したのですが、コンパイルは通るのですがなかなかコールバック先に通知が届きません。

  public event EventHandler ImageDownloaded; // 最初に実装したEventHandlerコールバック

  public delegate void myMethodDelegate(object sender, EventArgs e); // EventHandlerのつもりのDelegate宣言

  void RespCallback(IAsyncResult asynchronousResult) // WebRequest.BeginGetResponse メソッド のサンプルのコールバック
  {
   try
   { 
...
    // Read the response into a Stream object.
    Stream responseStream = myRequestState.response.GetResponseStream();
    myRequestState.streamResponse = responseStream;

    
     // 画像ファイルのときの処理

    String str = myRequestState.response.ContentType.ToLower();
    if (str.Contains("jpeg") || str.Contains("jpg"))
    {
    Delegate myDelegate = new myMethodDelegate(ImageDownloaded);
    myRequestState.Invoke(myDelegate); // myRequestStateはサンプルではただのクラスですがInvokeを使用するのでControlクラスを継承しています
    //ImageDownloaded(myRequestState, null); // 最初に試したHandleEventを使用したコールバック
     return;

    ......

 

お分かりの方いましたら、ご教示いただければと思います。

よろしくお願いいたします。


Viewing all articles
Browse latest Browse all 80

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>