我已经编写了一个Message Receive类的代码,该类使用backgroundworker来检查目录中的新文件(文件是从持续更新的用户接收的SMS消息)。如果该目录不为空,我会向每个新SMS发送确认消息并再次启动该工作人员。BackgroundWorker如何正确工作?
MessageReceiving mr = new MessageReceiving();
mr.bw.RunWorkerAsync();
我没有这一切,让我同步向用户发送消息 - -
public MessageReceiving()
{
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(e.Result == true)
{
SendAcknowledgement();
if(!bw.IsBusy)
bw.RunWorkerAsync();
}
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
bool flag = false;
while (flag.Equals(false))
{
string path = @"C:\SMS";
if (Directory.GetFiles(path).Length > 0)
{
e.Result = true;
flag = true;
}
else
{
e.Result = false;
}
}
}
我从主线程的初始化一次工人只要用户发送短信,我送他一个ACK。问题在于,即使发送一条短信,用户也会收到多个确认 - 为什么会发生这种情况?我想到了所有可能性,但无济于事!
SendAcknowledgement方法被多次调用,或者只调用一次?注意:查看['FileSystemWatcher'类](http://msdn.microsoft.com/zh-cn/library/default.aspx)。com/en-us/library/system.io.filesystemwatcher.aspx),那么在旋转的情况下它将更有效率。 –