将BusyIndicator放入子窗口实现公用

秋风_落叶_小木屋 2012-05-01 06:20:53
为了 让进度条实现简单的公用,把它放到了一个子窗口(childwindow)中,

public partial class SLW44ShowBusy : ChildWindow
{
public SLW44ShowBusy()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(SLW44ShowBusy_Loaded);
this.Closed += new EventHandler(SLW44ShowBusy_Closed);

}
void SLW44ShowBusy_Closed(object sender, EventArgs e)
{
SearchFinish();
}
void SLW44ShowBusy_Loaded(object sender, RoutedEventArgs e)
{
SearchBegin();
}
public void SearchBegin()
{
this.pingbi.Visibility = Visibility.Visible;//显示
busyIndicator1.IsBusy = true; //打开进度条
}
public void SearchFinish()
{
//关闭进度条
ThreadPool.QueueUserWorkItem((threadState) =>
{
Dispatcher.BeginInvoke(() =>
busyIndicator1.IsBusy = false
);
Dispatcher.BeginInvoke(() =>
this.pingbi.Visibility = Visibility.Collapsed
);
});
}
}



然后 在一个工具类里 写了此窗口的
打开 和关闭事件(BeginWaiting 和 EndWaiting)


private static SLW44ShowBusy showBusyForm = null;
private static SLW44ShowBusy GetBusyForm()
{
if (showBusyForm == null)
{
showBusyForm=new SLW44ShowBusy();
}
return showBusyForm;
}


//显示等待窗口
public static void BeginWaiting()
{
GetBusyForm().Show();
}
public static void EndWaiting()
{
GetBusyForm().Close();

}



现在的问题时,在别的silverlight窗口中,异步调用BeginWaiting() 和 EndWaiting() 后,子窗口是关了,但是原父窗口依然是置灰和不可操作状态,好像子窗口依然没有关一样,怎么回事儿啊 ???大神们帮帮忙 指点一下。

GetBusyForm().Close();改为GetBusyForm().DialogResult = false;也不行,怎么办呢?




...全文
143 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
嗯。。。
jv9 2012-05-02
  • 打赏
  • 举报
回复
相对其他控件而言,进度条控件不占用太多资源,通常来说,只需要将进度条的模板进行公共管理就可以了,如果有页面调用,只需独立设置就可以。

个人而言,不推荐将进度条放在childwindows中使用,会降低应用效率。
  • 打赏
  • 举报
回复
ChildWindows?呵呵。

你还是把BusyIndicator放在当前LayoutRoot里边吧。

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧