假设我有两个方法。其中一个是由列表框中选定的索引更改触发的方法。第二个方法帮助清除所有文本框,将列表框索引设置为-1,并设置焦点。
问题:
方法2执行时,它将列表框的选择索引更改为-1,从而触发第一个方法的事件。 Method 2是否停止自己的执行并将进程转移到事件,然后在Method 1完成后返回其工作...还是Method 2完成其整个代码块,然后由于所选索引更改而转移到Method 1?
假设我有两个方法。其中一个是由列表框中选定的索引更改触发的方法。第二个方法帮助清除所有文本框,将列表框索引设置为-1,并设置焦点。
问题:
方法2执行时,它将列表框的选择索引更改为-1,从而触发第一个方法的事件。 Method 2是否停止自己的执行并将进程转移到事件,然后在Method 1完成后返回其工作...还是Method 2完成其整个代码块,然后由于所选索引更改而转移到Method 1?
还有第三种选择可以探索:它们也可以同时运行!如果我正确理解了你的问题,方法2将由索引更改事件触发。在C# Windows Forms应用程序中,这个事件会在一个单独的执行线程中发生。
要探索的概念:线程。
希望这能给你在知识探索中提供一个起点。
我假设你所使用的编程语言是C#,因此你拥有支持多线程的语言。如果你不想考虑线程问题(如果你考虑到用户体验,这是一个坏主意),你可以在一个线程中运行GUI并具有相同的行为,除非组件创建了自己的线程(尽管这有点奇怪)。如果你想实现事件的异步(并行)执行,你需要让事件触发在它自己的线程上。
回答你的问题:如果你没有使用多线程,事件触发的方法将被排队等待执行。这正是在一些程序中看到GUI响应缓慢时发生的情况。
希望以上内容能够帮助你理清思路,并欢迎你作为新手的加入 :)
我自己也是初学者,也许我可以帮忙。Method2会被触发,然后当选择改变时,Method1会做他的事情,然后Method2会继续。
如果你不想在那个时候触发Method1,你可能想要做的是类似这样的事情: (真正的伪代码)
Method2(object sender, System.EventArgs e)
{
//Unsubscribe Method1 from ListboxEvent
Listbox.OnSelectionChange -= Method1;
... Stuff Method2 actually does ...
Manualy call Method1 if you want it to fire
//Subscribe Method1 from ListboxEvent
Listbox.OnSelectionChange += Method1;
}
可能并不是最优的方法(或许有一些最佳实践...),但至少你有了一些信息来帮助你搜索。希望它有所帮助!