0

我正在我的 C# 4.0 winform 应用程序中开发一个接口,以批量发送一些短信。每条消息内容都不一样,所以我必须一条一条地触发消息。我有一个最终用户可以发送短信的表格,它可能超过一千个。

我想管理一个队列。如果用户发送一条短信,那么它将被提交到队列中,队列将一一发送短信。

所以我必须创建一个表单来管理队列。问题是我希望我的应用程序正常工作,并且队列在后台发送短信。

那么我怎样才能完成这个任务呢?我试过BackGroundWorker了,但我不知道如何用表单维护一个单独的线程。

4

3 回答 3

2

所有表单都必须在 UI 线程上。SMS的发送应该由BackgroundWorker.DoWork事件来执行。然后通过BackgroundWorker.RunWorkerCompleted事件完成表单的更新。

UI线程是SWF(winforms)应用程序的主线程

如果您使用的是 C# 4.0 或更高版本,您可能还想研究 Take Parallel Library ( http://msdn.microsoft.com/en-us/library/dd460717.aspx )。但我会首先让 BackgroundWorker 实现工作。然后使用 TPL 发送同步短信。真的可以加快速度。

于 2013-01-29T07:41:59.747 回答
1

您必须创建一个线程(称为工作线程),它会在您的应用程序的整个生命周期中运行。

你必须有一个队列甚至更好的并发队列http://msdn.microsoft.com/en-us/library/dd267265.aspx

当队列中出现一个项目(短信)时,工作线程等待,获取该项目并完成其工作。

UI 与该工作完全分离。

这是 Thread 类的最基本用法。

后台工作者是最不适合的解决方案。显然你可以用洗衣机盖房子,但大多数人用砖头。

于 2013-01-31T04:23:14.123 回答
0

您可以启动 Thread 然后在其上创建新的表单实例(没有父级),然后启动消息循环(此类代码位于项目模板的 Main 方法中)。请记住,任何形式(通常是任何 GDI 对象)都只能在创建它的线程上使用。例如,您不能在另一个线程上创建子窗体,然后是父线程。每个 GUI 线程都必须运行消息循环。

于 2013-01-29T08:57:42.260 回答