对于想了解使用Application.DoEvents的读者,本文将提供新的信息,我们将详细介绍,并且为您提供关于ApplicationdoesnotspecifyanAPIlevelrequirem
对于想了解使用Application.DoEvents的读者,本文将提供新的信息,我们将详细介绍,并且为您提供关于Application does not specify an API level requirement!、Application.DoEvents 可能不是线程安全的、Application.DoEvents() 的使用、ApplicationEvent的有价值信息。
本文目录一览:- 使用Application.DoEvents()(使用时间)
- Application does not specify an API level requirement!
- Application.DoEvents 可能不是线程安全的
- Application.DoEvents() 的使用
- ApplicationEvent
使用Application.DoEvents()(使用时间)
可以Application.DoEvents()
在C#中使用吗?
这个功能是否可以让GUI跟VB6的其他方式一样赶上应用程序的其余部分DoEvents
?
答案1
小编典典根据我的经验,我建议在.NET中使用DoEvents时要格外谨慎。在包含DataGridViews的TabControl中使用DoEvents时,我遇到了一些非常奇怪的结果。另一方面,如果您要处理的只是带有进度条的小表格,那么可能就可以了。
最重要的是:如果要使用DoEvents,则需要在部署应用程序之前对其进行彻底的测试。
Application does not specify an API level requirement!
调试 android 代码的时候控制台提示 “Application does not specify an API level requirement!”说明你没有设置这个软件的最低兼容版本,在
AndroidManifest.xml 中
加入:
<uses-sdk android:minSdkVersion="*"/>Application.DoEvents 可能不是线程安全的
如果在 UI 的消息处理函数中进行较大量的计算或对界面进行操作,占用较长时间时可以在中间调用 Application.DoEvents 来响应用户操作,但不建议这样做,替代的方法就是在后台线程中进行这些操作,用线程池是一个不错的方法(例如 System.Threading.ThreadPool)。
该函数只能在 UI 的主线程中调用,不不不要在工作线程中调用该函数,否则 Application.DoEvents 可能挂死永不退出,使用 reflector 反编译了一下这个函数,发现里面没有使用 lock 之类的线程锁,可能不是线程安全的,在 MSDN 的文档中也没有说明该函数是线程安全的,所以一定不要在多个线程中使用它。
一条绝对安全的方法就是:别用它!
具体什么原因可能导致该函数不退出还没有研究出来,有空重现一下。
Application.DoEvents() 的使用
可以Application.DoEvents()
在C#中使用吗?
这个函数是一种让 GUI 跟上应用程序其余部分的方法吗,就像 VB6 的DoEvents
一样?
ApplicationEvent
事件机制在java的设计模式中也可以叫监听器模式或者是观察者模式。
分为三块:
ApplicationEvent 定义事件,事件源(什么事件)
EventPublisher : 发布事件
EventListener: 监听事件
下面上代码进行演示
/**
* 定义事件源
* @author penghaozhong
*
*/
public class UserEvent extends ApplicationEvent{
private static final long serialVersionUID = 1L;
private User user;
public UserEvent(Object source, User user) {
super(source);
this.user = user;
}
public User getUser() {
return user;
}
}
/**
* 监听事件
* @author penghaozhong
*
*/
@Component
public class UserEventListener implements ApplicationListener<UserEvent> {
@Async
@Override
public void onApplicationEvent(UserEvent event) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(event.getUser().getName() + " 客户注册了,发送注册邮件-----"+Thread.currentThread().getName());
}
}
@Autowired
private ApplicationContext context;
/**
* 发布事件
* @param user
*/
public void register(User user){
System.out.println(user.getName() + "注册啦"+Thread.currentThread().getName());
// 发送通知邮件
context.publishEvent(new UserEvent(this,user));
}
事件本身不支持异步调用,要想异步调用则在方法上添加@Async注解。
还需要开启异步配置在配置类中添加注解@EnableAsync
今天关于使用Application.DoEvents和的分享就到这里,希望大家有所收获,若想了解更多关于Application does not specify an API level requirement!、Application.DoEvents 可能不是线程安全的、Application.DoEvents() 的使用、ApplicationEvent等相关知识,可以在本站进行查询。
本文标签: