none
关于sendwindowlong RRS feed

  • 问题

  • dim p1 as new picturebox
    sub form_load()
          sendwindowlong p1,GWLP_WNDPROC,mypro
    end sub
     fucntion mypro()
      DefWindowProc(HWnd, Msg, wParam, lParam)
    end functionsub

    sub p1mouse_down()'此为p1原来的mousedown handle事件
           console.wriete("11") '发觉此语句不执行了
    end sub
    这种处理情况下,p1原来的mousedown handle不再执行了,有没办法可以令原来的mosedown事件自己处理呢?
    在结束调试的时候出现如下错误:Cross-thread operation not valid: Control 'P1' accessed from a thread other than the thread it was created on
    语句 sendwindowlong p1,GWLP_WNDPROC,mypro 应放在哪里才不会出错呢?
    P1_MouseDown 是否对应着 WM_LBUTTONDOWN 命令呢?

    2010年1月24日 6:22

答案

  • 你好!
         这个问题是由于你跨线程访问控件引起的,跨线程访问控件的时候需要使用Invoke方法,然后通过委托来实现访问!
    周雪峰
    2010年1月24日 8:34
    版主
  • 你好 你可以在Form加载中设置
    private void Form1_Load(object sender, EventArgs e)
    {
    Control.CheckForIllegalCrossThreadCalls = false;


    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月25日 2:04
    版主

全部回复

  • 你好!
         这个问题是由于你跨线程访问控件引起的,跨线程访问控件的时候需要使用Invoke方法,然后通过委托来实现访问!
    周雪峰
    2010年1月24日 8:34
    版主
  • 你好 你可以在Form加载中设置
    private void Form1_Load(object sender, EventArgs e)
    {
    Control.CheckForIllegalCrossThreadCalls = false;


    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月25日 2:04
    版主