从另一个线程访问SeismicCube

时间:2019-06-17 17:32:12

标签: c# multithreading ocean petrel

我正在使用线程在后台使用SeismicCube启动一个函数

public class JobSetup
{
    public SeismicCube cube;
}

public void Function1(SeismicCube cube)
{    
    var jobSetup = new JobSetup();
    jobSetup.cube = cube;
    var th = new Thread(new ParameterizedThreadStart(ThreadFunc));
    th.Start(jobSetup); 
}     

public void ThreadFunc(object state)
{
    var jobSetup = (JobSetup)state;
    ...
    ...
    Point3 new_p = jobSetup.cube.PositionAtIndex(new IndexDouble3(y, x, z));
}

由于Petrel是单线程应用程序,因此对本地Petrel域对象的所有访问都必须在主线程上进行。否则,您会收到以下运行时错误:

  

System.InvalidOperationException未处理Message =”跨线程操作无效:   应用程序从主线程以外的线程访问域对象。” Source =“ Slb.Ocean.Petrel.DomainObject”

0 个答案:

没有答案