我正在VB.Net中编写一个应用程序,用户可以在其中安排将来发送的电子邮件。在应用程序的基本表单关闭后,有没有办法让我的侦听器线程在后台运行?我还需要在系统启动时启动监听器,但不希望在那时打开任何表单。
示例(所需)功能:我在早上打开应用程序并安排三封电子邮件,其中一封应在三小时内发送,另外两封应在明天早上发送。我关闭了应用程序。在三个小时内,第一个发送。在一天结束时,我关闭了我的机器。当我明天早上把它转回去时,其他两个人在没有我打开申请的情况下被送去。
我想我需要将听众分成一个服务,但是想要确保在走这条路之前没有更简单的方法。
如果我最终拥有一个单独的服务和应用程序,我可以创建一个可以同时安装这两个服务器的安装程序吗?
答案 0 :(得分:4)
在项目的选项中,set the “Startup Object” to “Sub Main”而不是表单名称。您可能必须先禁用“应用程序框架”设置。
现在你必须手动启动表单,因为它不再自动完成,但另一方面你现在可以控制何时启动它,你的应用程序将在它到达结束时退出<{1}}方法(或显式退出时),而不是表单关闭时。
答案 1 :(得分:1)
如果您只想让程序保持运行,您可以为其提供TaskBar图标的定义,并使用图标的图形在应用程序中表示状态。它会出现在系统时钟旁边的右侧。
然后,只需重新配置您的开发项目,以便从该图标的菜单触发应用程序关闭事件,而不是关闭表单。
答案 2 :(得分:1)
使用NotifyIcon控件,当用户关闭主窗体时,捕获OnClosing事件以询问问题是否要最小化到托盘或退出应用程序。
以下是Microsoft的NotifyIcon控件的文档:
答案 3 :(得分:1)
我在这里有一个可能的解决方案。在表单结束事件中,您可以放置以下代码:
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Me.Visible = False
e.Cancel = True
End Sub
这将隐藏表单并允许它在后台运行,直到您关闭计算机。要处理重新启动然后发送电子邮件,我建议添加要发送到文本文件的电子邮件,可以在重新启动后访问,然后将程序添加到启动。一个更好的解决方案可能是拥有2个程序,一个在启动时并且始终隐藏,每15分钟检查一次文本文件(例如),以及在将新电子邮件添加到列表时启动的第二个程序并在文本文件中附加要发送的新电子邮件。
答案 4 :(得分:0)
(对不起,如果我错了,只是在这里提出一个可能的解决方案) 我想附加一个简单的数据库来保存电子邮件发送计划信息/日期时间,并在启动时使用通知图标加载应用程序(或没有通知图标,但有一个快捷方式显示用户界面/表单来提供电子邮件和日程安排信息/日期-time,如果需要+ BackgroundWorker,如果您希望应用程序进入睡眠模式并稍后唤醒它以发送第一个预定的电子邮件;在X小时后)。发送第一个电子邮件更新后,db然后退出应用程序。启动时检查数据库以发送第一封电子邮件,或者在发送第一封电子邮件之前,如果PC启动则进入睡眠模式但是,如果已发送第一封电子邮件,则发送其他两封预定电子邮件(请检查数据库日期时间)。这应该做的工作...... :)