BackgroundWorkerということは、Windowsフォームアプリでしょうか。
開発環境、フレームワークのバージョン、プロジェクトの種類は回答に影響する場合もあるので、記載するようにしてください。
発生元コントロールを取得するなら、単純にDragDropイベントのsenderから取得すればいいと思うのですが。
using System.Threading.Tasks;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var panels = new[] { panel1, panel2 };
foreach(var panel in panels)
{
panel.DragEnter += (sender, e) =>
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
};
panel.DragDrop += (sender, e) =>
{
_ = DragDropTask((Control)sender, (string[])e.Data.GetData(DataFormats.FileDrop, false));
};
}
}
private async Task DragDropTask(Control control, string[] dropFiles)
{
textBox1.AppendText($"{control.Name} に {dropFiles[0]} がドロップされました\r\n");
switch( control.Name )
{
case "panel1":
await HeavyTask_Panel1();
break;
case "panel2":
await HeavyTask_Panel2();
break;
}
textBox1.AppendText($"DragDropTask終了\r\n");
}
private async Task HeavyTask_Panel1()
{
textBox1.AppendText($"panel1の重い処理を実行(3秒待機)\r\n");
await Task.Delay(3000);
}
private async Task HeavyTask_Panel2()
{
textBox1.AppendText($"panel2の重い処理を実行(5秒待機)\r\n");
await Task.Delay(5000);
}
}