none
invoke和lock为什么不能一起使用 RRS feed

  • 问题

  • while(true)
    {
    lock(this)
    { invoke(...) }
    }
    运行时是正确的,退出时,有一定的机率程序会死掉,退不出来。。
    如果
    while(true)
    {
    lock(this) { }
    invoke(...)
    }
    这样就不会,但是就无法结合lock
    • 已编辑 tssing 2009年5月18日 1:18
    2009年5月18日 0:54

答案

  • while(true)
    {
    lock(this)
    { invoke(...) }
    }
    运行时是正确的,退出时,有一定的机率程序会死掉,退不出来。。
    如果
    while(true)
    {
    lock(this) { }
    invoke(...)
    }
    这样就不会,但是就无法结合lock
    明白了,,lock什么都可以,,就是不要lock(this)
    2009年5月18日 2:20

全部回复

  • while(true)
    {
    lock(this)
    { invoke(...) }
    }
    运行时是正确的,退出时,有一定的机率程序会死掉,退不出来。。
    如果
    while(true)
    {
    lock(this) { }
    invoke(...)
    }
    这样就不会,但是就无法结合lock
    明白了,,lock什么都可以,,就是不要lock(this)
    2009年5月18日 2:20
  • invoke 的内容有关吧  - -b
    有效回复过700 撒花
    2009年5月18日 2:46
  • invoke 的内容有关吧  - -b
    有效回复过700 撒花

    一切都有可能。。
    2009年5月18日 2:47
  • 体育用品~广告贴  哈哈


    如果你的invoke 里面有多线程操作  又访问了当前对象  可能就挂了哦
    有效回复过700 撒花

    2009年5月18日 4:43
  • 体育用品~广告贴  哈哈


    如果你的invoke 里面有多线程操作  又访问了当前对象  可能就挂了哦
    有效回复过700 撒花

    完全是有道理,但是微软没有相应的解决方案吗。。
    2009年5月18日 6:43
  • BeginInvoke is the key??? to instead Invoke?
    2009年5月18日 8:54
  • 目前编译器不能检查这个问题,只好自己多注意了啊!
    周雪峰
    2009年5月18日 8:57
    版主
  • 目前编译器不能检查这个问题,只好自己多注意了啊!
    周雪峰
    BeginInvoke就不会造成程序死掉。。。但是,合理性大大出问题,就算加了sleep,InvokeFunction()时常也调用不到。。
    lock(this)
    {
    BeginInvoke(Delagate(InvokeFunction),...);
    thread.sleep(1);//这样确保会调到I
    nvokeFunction()函数???
    Lock(_invokeobject){}
    }

    InvokeFunction()
     {
    Lock(_invokeobject)
    { //do something }
     }
    • 已编辑 tssing 2009年5月18日 9:18
    2009年5月18日 9:14
  • 有什么办法,保证每次让BeginInvoke一定会被调用到吗???
    2009年5月18日 9:34
  • 确实要这样用到,请问有无可能,还请高手多多帮忙。。
    2009年5月21日 5:23