none
backgroundwork RRS feed

  • 问题

  • 我想用多线程的时候,出现问题  线程间操作无效: 从不是创建控件“listBox1”的线程访问它。

     

    然后我看有个 backgroundworker 可以使用下,它的话,算是多线程么? 如果不是,和多线程,有啥不同?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月17日 3:58

答案

全部回复

  • 你好!

    backgroundworker 控件的 dowork 事件是在线程中执行的,若你想在此事件中操作 UI 上的控件则需要通过调用控件的 Invoke 方法实现。


    知识改变命运,奋斗成就人生!
    2010年11月17日 4:38
    版主
  • 您好

    通过委托 (Delegate) 调用控件的 Invoke 方法,參考以下文章

    [C#.NET] 如何 使用 BackgroundWorker 多執行緒 / 跨執行緒 存取UI

     

     


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年11月17日 4:42
  • 我在窗体上执行 向服务器存数据。把存的代码写在 backgroundwork 下,存完之前,我希望有个提示 比如 “数据添加中,请稍后”, 完了之后,就会自动 消失。。怎么做的啊。。

     

    我原来直接把代码写在form的代码下的话,存的时候有点死机一样,受不了。


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月17日 5:54
  • 错了,不是像死机,像程序死掉了一样
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月17日 5:55
  • 可以把需要显示信息的代码放到 BackgroundWorker 的 DoWork 事件处理程序中,利用 UI 控件的 Invoke 方法执行该过程。如:

    myBackgroundWorker.DoWork += (s, e) => { this.Invoke(() => { this.myLabel.Text = "Loading, please wait..."; }); };


    Mark Zhou
    2010年11月17日 6:16
  • 当我在backgroundworker 向数据库中比如添加 1000条数据,但是到500条的时候出现网络服务器断开了,那怎么办?我现在好像跳出一个连接不上服务器的出错数据
    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……
    2010年11月18日 9:30
  • 可以利用 try...catch 结构化异常处理语句捕获一个 TimeoutException 异常,然后根据自己需要,弹出一个提示框或者改变 UI 文本。
    Mark Zhou
    2010年11月19日 6:31