专栏首页sofu456wpf线程进度控制

wpf线程进度控制

先上源码:

namespace touchPy.Loading
{
public class MyLoading
{
public static readonly MyLoading Instance = new MyLoading();
private ScheduleBarWindow _mld;//loading对象
Thread _newWindowThread;//loading线程

object obj = new object();
bool isStart = false;

private MyLoading()
{

}

#region 载入loading控件
/// <summary>
/// 载入loading控件
/// </summary>
public void LoadingStart()
{
isStart = true;
_newWindowThread = new Thread(new ThreadStart(Loading));
_newWindowThread.SetApartmentState(ApartmentState.STA);
_newWindowThread.IsBackground = true;

_newWindowThread.Start();
//threadLst.Add(_newWindowThread);
}
#endregion

#region 线程载入函数
private void Loading()
{
_mld = new ScheduleBarWindow();
_mld.ShowDialog();

//System.Windows.Threading.Dispatcher.Run();

}

#endregion

#region 结束线程,关闭loading
/// <summary>
/// 结束线程,关闭loading
/// </summary>
public void LoadingEnd()
{
if(isStart)

{
while (_mld == null)
{
Thread.Sleep(10);
}

_mld.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
_newWindowThread.Abort();
isStart = false;
}
}
#endregion

#region 结束线程,关闭loading
/// <summary>
/// 结束线程,关闭loading
/// </summary>
public void LoadingEnd(UCTreeView _treeView)
{
Thread _WindowThread = new Thread(LoadingHalt);
_WindowThread.SetApartmentState(ApartmentState.STA);
_WindowThread.IsBackground = true;
_WindowThread.Start(_treeView);
}
#endregion

void LoadingHalt(object data)
{
if (isStart)
{
UCTreeView _tree = data as UCTreeView;
bool bFlag = (bool)_tree.Dispatcher.Invoke(new Func<bool>(()=>{
return _tree.IsLoaded;
}), null);
while (_mld == null || !bFlag)
{
bFlag = (bool)_tree.Dispatcher.Invoke(new Func<bool>(() =>
{
return _tree.IsLoaded;
}), null);
Thread.Sleep(10);
}

_mld.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
_newWindowThread.Abort();
isStart = false;
}
}

}
}

C#线程为单线程模式,所有界面资源线程之间不能共享,对于主线程中后台代码业务处理比较耗时的情况下,需要添加新的线程处理另外一些界面效果。

IsLoad属性,作为界面数据使用数据绑定方式产生延迟的返回结果,告诉用为前台渲染效果是否完成,是否取消ScheduleBarWindow等待加载窗口提示的显示。

Dispatcher.BeginInvokeShutdown关闭消息泵的处理流程,同时关闭了显示窗口。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 线程同步

    多个线程同时访问1个数据时,如果只有读操作没有写操作可以不同步,如果写和读同时交互,就需要加锁,对数据进行同步,如STL容器是线程安全的,可以不考虑,除了少部...

    sofu456
  • vs qt插件

    Qt vs tool上面,设置convert project转换代码,自动修改配置。

    sofu456
  • QListWidget添加删除

    qt和vc一样自由线程模式,线程间可以访问ui,但线程间访问qt内部封装问题,导致很多一样,可以使用信号和槽线程间传递数据,避免异常

    sofu456
  • Qt输出时间格式并嵌套翻译字段

    Qt君
  • [qemu][block]qemu-nbd技术分析

    前言: 想要修改Guest中的文件,第一种办法可以把虚拟机启动虚拟机,在虚拟机内部修改。 还有一种办法,使用qemu的nbd功能。准确来说,是使用linux提供...

    皮振伟
  • javascript当中arguments用法

    8)arguments 例 3.8.1 <head> <meta http-equiv="content-type" content="text/h...

    马克java社区
  • NodeJS模块研究 - Buffer

    Buffer 作为 nodejs 中重要的概念和功能,为开发者提供了操作二进制的能力。本文记录了几个问题,来加深对 Buffer 的理解和使用:

    心谭博客
  • Nodejs进阶:核心模块Buffer常用API使用总结

    Buffer是node的核心模块,开发者可以利用它来处理二进制数据,比如文件流的读写、网络请求数据的处理等。

    IMWeb前端团队
  • PHP的变量范围

    什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分。 PHP中变量的作用域可以分为:超全局(全局变量的特殊类型...

    luxixing
  • Javascript数组系列四之数组的转换与排序Sort方法

    今天我们继续来介绍 Javascirpt 数组中的方法,也是数组系列的第四篇文章,因为数组的方法众多,每篇文章我们都对数组的每个方法都有比较细致的描述,只要你能...

    六小登登

扫码关注云+社区

领取腾讯云代金券