第一种方法是用Thread+handler来实现,适用于大型框架的逻辑处理
final int PROGRESS_DIALOG = 0;
ProgressThread progressThread;
ProgressDialog progressDialog;
Activity activity;
protected Dialog onCreateDialog(int id) {
switch (id) {
case PROGRESS_DIALOG:
progressDialog = new ProgressDialog(activity);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("请稍等...");
progressDialog.setCancelable(true);
progressThread = new ProgressThread(handler);
progressThread.start();
return progressDialog;
default:
return null;
}
}
private class ProgressThread extends Thread {
// 由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,
Handler mHandler;
ProgressThread(Handler h) {
mHandler = h;
}
public void run() {
String buffer = "";
Message msg = mHandler.obtainMessage();
Bundle b = new Bundle();
b.putString("buffer", buffer);
msg.setData(b);
mHandler.sendMessage(msg);
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 获取数据
String buffer = msg.getData().getString("buffer");
activity.removeDialog(PROGRESS_DIALOG);
}
};
第二种是:AsynTask,适用于小型简单的处理:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
MyAsyTast asytast =new MyAsyTast();
asytast.execute();
}
private class MyAsyTast extends AsyncTask<Integer, String, String>{
private ProgressDialog dialog;
@Override
protected String doInBackground(Integer... params) {
if (isCancelled()) {
return null;
}
//处理事务之前的操作,或者是接收获取数据等待处理
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (GrouponOrderCheck01.this.isFinishing()) {
return ;
}
if (dialog!=null) {
dialog.cancel();
}
if (isCancelled()) {
return;
}
//处理事件
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog =DialogHelper.createProgressDialog(GrouponOrderCheck01.this);
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
if (isCancelled()) {
return;
}
}
}
分享到:
相关推荐
在Linux平台上用多线程方法实现浮点向量的点积计算: 点积规则可以自己定,程序中采用的是ai=bi=-1/1/0(按3取余运算),另外,计算程序运行时间. 输入格式为: vec_mul thread_num N 参数: thread_num:线程数,从1到...
本科操作系统实验代码,使用多线程编程实现浮点向量的点积计算。
标题提到的“MFC创建用户界面线程方法2”指的是不依赖于`AfxBeginThread`函数,而是使用`CreateThread`系统API来创建线程。这种方法虽然更加底层,但提供了更大的灵活性。 `AfxBeginThread`是MFC提供的一个方便的...
总结起来,"用多线程方法实现在MFC中调用控制OpenGL绘图"涉及到的知识点包括:MFC编程基础、OpenGL绘图原理、多线程编程、GLUT库的使用、线程间通信和同步、以及Windows消息机制。掌握这些技能,开发者就能创建出...
本篇文章将详细阐述VC++中实现多线程的三种常见方法:使用`CreateThread`函数、`_beginthread`/`_beginthreadex`函数以及基于`std::thread`的C++11标准库方法。 1. **使用CreateThread函数** Windows API提供的`...
在实际编程中,理解并熟练掌握这些线程方法对于编写高效的并发程序至关重要。例如,`synchronized`关键字用于保证共享数据的线程安全性,避免数据竞争。当多个线程尝试访问同一共享资源时,`synchronized`可以确保...
Java多线程编程安全退出线程方法介绍 Java多线程编程安全退出线程方法的重要性在于确保线程的资源正确释放,避免程序工作在不确定的状态下。以下是Java多线程编程安全退出线程方法的知识点: 1. Thread.stop()方法...
编写基于多线程的素数(是除了自身和1以外,没有其它素数因子的自然数)判定程序。待判定的整数经过键盘录入后存放在一个列表中,创建10个线程从列表中取出整数进行判定,判定的结果存入到另一个列表中,用户可以通过...
- 继承`Thread`类:自定义一个类继承`Thread`,重写`run()`方法,然后实例化并调用`start()`方法启动线程。 - 实现`Runnable`接口:创建一个实现了`Runnable`接口的类,重写`run()`方法,然后将`Runnable`对象传递...
这里,`WorkerMethod`是你的工作线程方法,执行实际的任务。 对于停止线程的按钮,我们需要一种机制来中断正在运行的线程。由于C#线程不直接支持“停止”操作,我们通常使用取消标志或共享变量来指示线程何时应停止...
本示例着重讲解几个关键的线程方法,包括`Abort`,`Join`,`Sleep`,`Interrupt`以及`Start`,这些都是在实际开发中频繁使用的功能。 1. **Start方法**: `Thread.Start`方法用于启动新创建的线程。当你创建了一个...
# 多线程.js//线程暂停//线程停止//定义一个线程//线程开始执行//等待线程执行完闭。
4. **线程方法**:TestMethod1、TestMethod2和TestMethod3是三个线程执行的方法。这些方法通常包含循环,用于向输出设备(如控制台或日志文件)写入数据。每个方法在各自的线程中独立运行,可以实现并行输出。 5. *...
2. **使用委托**:可以将线程方法作为委托传递给`Thread`类。 ```csharp Thread newThread = new Thread(new ThreadStart(YourDelegateMethod)); newThread.Start(); ``` #### 三、线程的状态 线程在其生命周期...
- **ThreadStart**:这是一种创建线程的方法,适用于没有参数的线程方法。可以通过创建Thread实例并传递一个ThreadStart委托给它的Start方法来启动一个新的线程。 ```csharp Thread thread = new Thread(new Thread...
在多线程中,有时候使用MessageBox.Show方法弹出对话框,弹出的Messagebox不是模态的,不能满足我的要求.所以有了这段代码.
1. **定义线程方法**:线程执行的任务通常封装在一个方法中。这个方法被称为线程方法,因为线程将调用它来执行工作。例如: ```csharp public void MyThreadMethod() { // 这里编写线程执行的代码 } ``` 2. **实例...