سلام
BackgroundWorker خودش بیانگر یک نخ جداگانه است. send_gsm_sms(); رو چرا در رویداد DowWork مستقیماً صدا نمی زنی؟
می دونی که قبلش هم باید RunWorkerAsync() رو صدا بزنی.
How to: Use a Background Worker