WPFで再描画がされなくなる?
最近は、人が作ったプログラムのメンテばっかで、自分ではたいしたこともしてないんだけど、WPFで画面が再描画されなくなる病気が発生して困っている。年中困っているわけだけど・・・
発生しているのは、
VISTA+VS2008SP1+.NET Framework3.5SP1なマシンで発生している
その他の環境で試したわけではないが、
XP+VS2008SP1+.NET Framework3.5SP1では発生しない
VISTAのインストール直後のパソコンでも発生しない(ただし、こいつはVM上のマシン)
で、問題のソースはこんな感じ
Window1.xaml
<Window x:Class="Opacity.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" AllowsTransparency="True" WindowStyle="None" Background="{x:Null}" Title="Window1" Height="205" Width="415"> <Grid Name="grdMain"> <!--メインパネル--> <Border BorderBrush="#999999" BorderThickness="1" CornerRadius="40 40 40 40" Background="#e0e0e0"></Border> <Button HorizontalAlignment="Right" Margin="0,0,12,13" Name="button2" Width="51" Click="button2_Click" Height="43" VerticalAlignment="Bottom">閉じる</Button> <Button Height="36" HorizontalAlignment="Left" Margin="15,20,0,0" Name="button3" VerticalAlignment="Top" Width="90" Click="button3_Click">はいよ</Button> </Grid> </Window>
Window1.xaml.cs
private void button2_Click(object sender, RoutedEventArgs e) { this.Close(); } private void button3_Click(object sender, RoutedEventArgs e) { this.Opacity = 0.5; System.Threading.Thread.Sleep(150); System.Windows.Forms.Application.DoEvents(); Process proc = Process.Start("notepad.exe"); proc.WaitForExit(); this.Opacity = 1; }
これを実行して、3分以上ほったらかして起動しているノートパッドを閉じるとさぁ
ほら?
ね、
半透明のままの画面でとまっているでしょう?
不思議だねぇ
いろいろ、調べたんだけど原因はわからないw
正直WPFが理解できてない自分orz
proc.WaitForExit();
を
while (!proc.HasExited) { System.Threading.Thread.Sleep(100); }
にしたり、もしくは、
this.Opacity = 0.5;
とかやっているところを
this.grdMain.Opacity = 0.5;
とかすれば、この現象は発生しない
でも、何か釈然としないw
大体、DoEventsな感じがイヤーな感じなんだけど・・・
WPFで画面のプロパティーを更新して処理中にそれを反映させてやる方法ってどうするのが正解?
System.Windows.Forms.Application.DoEvents();
って、おいって感じでしょ
WPFなのに、Windows.Forms.Application何だから・・・
だれぞ、賢者の人助けてw
私が、呼んだのはこの本くらい?
- 作者: 高橋忍,川西裕幸
- 出版社/メーカー: ソフトバンク クリエイティブ
- 発売日: 2007/04/07
- メディア: 大型本
- 購入: 3人 クリック: 158回
- この商品を含むブログ (26件) を見る