UWP与Android中如何在多线程中刷新UI

无论我们是在进行UWP开发亦或是Android开发,都会在程序运行的同时产生一个UI线程,这是管理你界面的线程,而这也导致你在子线程中越界修改界面时将会报错。本文将对UWP以及Android更改UI的方式进行讨论。

UWP

现在先假设我们拥有一个子线程thread1,其要去更改Mainpage中的一名为TextBox1的控件内的文字(在此例中System.Threading.Tasks.Task和System.Threading.Thread等价)

thread的定义为

private void thread(){/*do_something();*/TexBox.Text="Hello World!";}

显然这样会报错,所以我们得采用通知UI线程进行更改的方式,其分为两步:

1.添加Invoke函数

2.将更改UI的action传入Invoke函数中

我们首先进行第一步

public async void Invoke(Action action, Windows.UI.Core.CoreDispatcherPriority Priority = Windows.UI.Core.CoreDispatcherPriority.Normal){await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Priority, () => { action(); });}

这就是个模板函数,直接copy就行了,其作用为将传入的action通知UI线程

然后更改thread函数,重写当中关于更改UI的部分,将此action传入Invoke函数中

private void thread(){/*do_something();*/Invoke(() =>    {    TexBox.Text="Hello World!";    });}

Android

在Android中更改UI是可以分成情况的,在非多线程的情况下我们可以直接通过Adapter的notifyDataSetChanged()刷新,而另外一种则可以用到 handler

使用handler同样分为两步

一是更改在你的page类中创建一个handler

二是在thread中传递message给hundler提示刷新

此处假设为更改一个listView并且其适配器为chatAdapter

public class MainActivity extends AppCompatActivity{    //创建handler对象    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            int what = msg.what;            switch(what) {                case 0:                    //提示Adapter刷新界面                    chatAdapter.notifyDataSetChanged();                default:            }        }    protected void onCreate(Bundle savedInstanceState) {    /*    do_something()    */    }}

注意在上面handler的定义中我们对于传入0的情况进行了定义,即当传入0时将会刷新UI

然后在thread中

 class thread extends Thread{        public void run(){            /*            do_something();            */            //此时应已经做完更改值的操作,接下来为传递message更改UI            Message message=Message.obtain();            message.what=0;            handler.sendMessage(message);        }    }

更多相关文章

  1. Android中微信主界面菜单栏的布局实现代码
  2. Android Studio如何提示函数用法
  3. Android下实现非启动界面Wifi连接
  4. android google 分屏 多窗口 按home键界面错乱故障分析(一)分屏的
  5. Android移动应用界面的模板化设计
  6. Android 4.0 ICS 用户界面概述
  7. Android移动应用界面的模板化设计【自定义BaseActivity】
  8. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  9. Android和iPhone应用程序界面布局示例

随机推荐

  1. Android(安卓)自己动手写ListView学习其
  2. android页面用jquery窗口大小获取错误问
  3. Android Paging - PagedListAdapter
  4. androd 事件分发机制的初步理解
  5. 在Android 2.3中如何使用native_activity
  6. Android Weekly - 第 175 期
  7. 成功解决 Android 下载中文文件名
  8. 记录Android中@Parcelize的一个小坑
  9. 图解Android - Zygote, System Server 启
  10. Android之动画(Java代码实现)1