Visual StudioでWPFを用いてGUIアプリを開発中です。非同期処理を開発しています。
処理の内容は
- ボタンが押されたら非同期処理に入る
- リスト該当パスを定期的に確認(1秒に一度)確認し、作業ファイル置き場にコピー(ループスタート)
- Image.Souceにコピーした該当ファイルを指定する(描写)
- 処理時間をViewListに描写
- ループスタートに戻る
といった感じです。該当部分のみ記述します。このコードでコンパイルは問題なく通るのですが、GUIアプリのImageウィンドウに画像が表示されません。一方で、同様にUI処理部分としてInvoke内で記述しておりますlistViewへの追加処理はうまく描写できます。長い時間詰まってしまいましたので、申し訳ありませんが、アドバイスをご教授いただきたく思っております。なおFile.deleteが悪さをしているのではないかと思い、消してみましたがだめでした。
C#
1 private async void show_image(object sender, RoutedEventArgs e) 2 { 3 ShowButton.IsEnabled = false; 4 5 try 6 { 7 await Task.Run(() => 8 { 9 while(true) 10 { 11//----------async loop start------------/ 12 13 String origin_image_path = "**.jpg"; 14 String dst_image_path ="***.jpg" 15 File.Copy(origin_image_path, dst_image_path, true); 16 17 //lock less bitmap 18 MemoryStream data = new MemoryStream(File.ReadAllBytes(dst_image_path)); 19 WriteableBitmap wbmp = new WriteableBitmap(BitmapFrame.Create(data)); 20 data.Close(); 21 22 this.Dispatcher.Invoke((Action)(() => 23 { 24 listView.Items.Add(new string[] { str_date, "Start" }); 25 listView.Items.Add(new string[] { end_date, "End" }); 26 this.MainImage.Source = wbmp; 27 28 })); 29 30 File.Delete(dst_image_path); 31 System.Threading.Thread.Sleep(1000/60); 32//-------------async loop end---------------/ 33 } 34 }); 35 } 36 catch 37 { 38 39 } 40 finally 41 { 42 ShowButton.IsEnabled = true; 43 44 } 45 46 47 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。