首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制台应用程序中的C#线程调度

控制台应用程序中的C#线程调度
EN

Stack Overflow用户
提问于 2011-09-07 08:24:17
回答 2查看 1.8K关注 0票数 1

我正在使用Jurassic javascript编译器在我的C#应用程序中运行javascript。现在,侏罗纪不是线程安全的,我从到处都是的线程调用函数(在javascript中),我认为这并不是那么聪明。我所能做的就是在javscript引擎上创建一个简单的锁,然而,我想要的是一个类似于在WPF或WinForms中使用GUI线程的编程模型。因此,我产生了一个线程,并在该线程中创建了我的javascript-engine,我希望的是不允许任何其他线程编辑在该线程中创建的对象(这将只是javascript-engine和所有的js-objecte)。然后,为了从其他线程调用js-code,我想使用一个分派器或类似的东西,让js-thread运行代码。

这在C#中是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-07 09:46:32

我不太清楚你在问什么,但我会尽力帮助你的。

你能使用信号量来锁定运行javascript引擎的线程吗?即使您不使用Semaphore类,也可以使用boolean或"lock“关键字来保护执行引擎的代码块。由该线程产生的对象可以被带有引擎的类隐藏,直到您准备好为止。您还可以在该类中公开一个方法,该方法允许代码注入或从受保护代码后面获取对象。

票数 0
EN

Stack Overflow用户

发布于 2011-09-07 22:59:55

它没有完全回答你的问题,但你可能想看看this MSDN article.,它谈到了WPF对它们的对象和Dispatcher模型,以及Dispatcher,DispatcherObject和DispatcherSynchronizationContext类采取的方法。

对于单个对象,他们建议从DispatcherObject继承(对于您的情况可能不可行),并在公共访问上调用继承的VerifyAccess()方法。

代码语言:javascript
复制
public class ThreadOwnedObject : DispatcherObject
{
    private string field;
    public string ExposedProperty
    {
        get { return field; }
        set
        {
            VerifyAccess(); 
            field = value;
        }
    }
}

并且调用将使用内置的调度程序。

代码语言:javascript
复制
ThreadOwnedObject ownedInstance = new ThreadOwnedObject();
ownedInstance.Dispatcher.Invoke(new Action(() => ownedInstance.ExposedProperty = "foo"));

或者,如果这一点或本文中的DispatcherSynchronizationContext不能满足您的需要,我想您可以创建一种机制来模拟DispatcherObject,方法是在创建对象时保留Thread.CurrentThread.ManagedThreadId,并针对每个公开的访问执行对该值的检查。除此之外,我不认为有一种内置的机制可以将随机对象与给定的线程相关联。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7327630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档