この奇妙な問題があります。
メインスレッドにあるコード:
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler((ss, ee) =>
{
Dispatcher.BeginInvoke(() =>
{
try
{
BitmapImage bi = new BitmapImage();
bi.SetSource(ee.Result);
WriteableBitmap wb = new WriteableBitmap(bi);
_okAction.Invoke(linkTexBox.Text, wb);
theProgressBarDialog.Close();
}
catch (Exception)
{
theProgressBarDialog.Close();
string msg = "Cannot fetch the image. Please make sure the image URL is correct";
MessageBox.Show(msg);
}
});
});
client.OpenReadAsync(new Uri("Image URL without cross domain problem"));
theProgressBarDialog.Show();
画像が正常に読み込まれ、キャンバスにレンダリングされました。
奇妙な動作は、Silverlight アプリケーション全体がフリーズしているように見える場合があり、右クリック以外のユーザー アクションにアプリが応答せず、デフォルトの Silverlight コンテキスト メニューが表示されます。
ボタンが強制的に無効になります。
デバッグ時に例外はスローされません。
編集:を設定client.AllowReadStreamBuffering = false
すると、例外が発生します:
{System.NotSupportedException: Read is not supported on the main thread when buffering is disabled.
at MS.Internal.InternalNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.Windows.Media.Imaging.BitmapSource.ReadStream(Stream streamSource, Byte[]& buffer, Int32& position)
at System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(Stream streamSource)
at System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(Stream streamSource)
at System.Windows.Media.Imaging.BitmapSource.SetSource(Stream streamSource)
at ToonGui.ImportImageDialog.<>c__DisplayClass2.<OKButton_Click>b__1()}
[System.NotSupportedException]: {System.NotSupportedException: Read is not supported on the main thread when buffering is disabled.
at MS.Internal.InternalNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.Windows.Media.Imaging.BitmapSource.ReadStream(Stream streamSource, Byte[]& buffer, Int32& position)
at System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(Stream streamSource)
at System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(Stream streamSource)
at System.Windows.Media.Imaging.BitmapSource.SetSource(Stream streamSource)
at ToonGui.ImportImageDialog.<>c__DisplayClass2.<OKButton_Click>b__1()}
Data: {System.Collections.ListDictionaryInternal}
InnerException: null
Message: "Read is not supported on the main thread when buffering is disabled."
StackTrace: " at MS.Internal.InternalNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)\r\n at System.Windows.Media.Imaging.BitmapSource.ReadStream(Stream streamSource, Byte[]& buffer, Int32& position)\r\n at System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(Stream streamSource)\r\n at System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(Stream streamSource)\r\n at System.Windows.Media.Imaging.BitmapSource.SetSource(Stream streamSource)\r\n at ToonGui.ImportImageDialog.<>c__DisplayClass2.<OKButton_Click>b__1()"
BackgroundWorker
ダウンロード タスクを別のスレッドで実行するには、クラスを使用する必要がありますか?