GVKun编程网logo

使用Application.DoEvents()(使用时间)

5

对于想了解使用Application.DoEvents的读者,本文将提供新的信息,我们将详细介绍,并且为您提供关于ApplicationdoesnotspecifyanAPIlevelrequirem

对于想了解使用Application.DoEvents的读者,本文将提供新的信息,我们将详细介绍,并且为您提供关于Application does not specify an API level requirement!、Application.DoEvents 可能不是线程安全的、Application.DoEvents() 的使用、ApplicationEvent的有价值信息。

本文目录一览:

使用Application.DoEvents()(使用时间)

使用Application.DoEvents()(使用时间)

可以Application.DoEvents()在C#中使用吗?

这个功能是否可以让GUI跟VB6的其他方式一样赶上应用程序的其余部分DoEvents

答案1

小编典典

根据我的经验,我建议在.NET中使用DoEvents时要格外谨慎。在包含DataGridViews的TabControl中使用DoEvents时,我遇到了一些非常奇怪的结果。另一方面,如果您要处理的只是带有进度条的小表格,那么可能就可以了。

最重要的是:如果要使用DoEvents,则需要在部署应用程序之前对其进行彻底的测试。

Application does not specify an API level requirement!

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 可能不是线程安全的

Application.DoEvents 可能不是线程安全的

    如果在 UI 的消息处理函数中进行较大量的计算或对界面进行操作,占用较长时间时可以在中间调用 Application.DoEvents 来响应用户操作,但不建议这样做,替代的方法就是在后台线程中进行这些操作,用线程池是一个不错的方法(例如 System.Threading.ThreadPool)。

    该函数只能在 UI 的主线程中调用,不不不要在工作线程中调用该函数,否则 Application.DoEvents 可能挂死永不退出,使用 reflector 反编译了一下这个函数,发现里面没有使用 lock 之类的线程锁,可能不是线程安全的,在 MSDN 的文档中也没有说明该函数是线程安全的,所以一定不要在多个线程中使用它。

    一条绝对安全的方法就是:别用它!

    具体什么原因可能导致该函数不退出还没有研究出来,有空重现一下。

Application.DoEvents() 的使用

Application.DoEvents() 的使用

可以Application.DoEvents()在C#中使用吗?

这个函数是一种让 GUI 跟上应用程序其余部分的方法吗,就像 VB6 的DoEvents一样?

ApplicationEvent

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等相关知识,可以在本站进行查询。

本文标签: