I don't have your classes, but a quick test with "abstracted code" from yours:
private void DoIt()
{
var backGroundWorker = new BackgroundWorker();
backGroundWorker.DoWork += (sender, aventArgs) => launchRequest(aventArgs.Argument as MyClass);
backGroundWorker.RunWorkerAsync(new MyClass(1234));
}
private void launchRequest(MyClass JobSummaryobj)
{
Console.WriteLine(JobSummaryobj.I);
}
private class MyClass
{
public int I { get; set; }
public MyClass(int i) { I = i; }
}
Give me consistent results, as I'd expect.
I'd suggest that the problem is with your JobSummaryobj rather than the code you show, and I'd try looking closely at it and what happens to it before, during and after the setup for the BackgroundWorker. It may be that the main thread is changing the value to soon or too late and that shows up as an inconsistency in your secondary thread intermittently.
But without your whole system there is nothing we can do to help!