公司的一个小型管理系统,我目前写成单线程,但是有人说你这样不行,后台调用DAL层的数据库访问方法时前台UI就无法操作了。我以前写过一个网络监听的程序,那个UI界面和后台监听确实是用到了多线程。但是我这个管理系统的架构是仿照PetShop设计的伪3层的CS,而我看PetShop似乎并没有用到多线程。请教各位大大,像管理系统这种软件,需不需要用到多线程?什么情况会用到?谢谢诶。另外顺便问下:我这系统实现了按照用户在UI界面的交互对excel,word的动态输入输出,能后台数据库大概十个表做增删改查,最多是2表联查,能做能像这种层度的作品,去北京深圳能找到什么水平的工作。以前有2年工作经验,还在钢铁公司做过简单的自动化管理系统。上个我做的系统的截图。

解决方案 »

  1.   

    UI用还差不多呀,DAL也用多线程???
      

  2.   

    如果查询数据量大需要等待  在UI上用!!,DAL不需要!!小型管理系统应该不需要吧!不过还是要根据你的情况来决定!!
      

  3.   

    请问怎样在线程上启动UI?我的程序解决方案里面,"启动项目"设定为UI所在的“Windows窗体项目”,其他的DAL,BLL等项目都设为类库,不能作为“启动项目”的
      

  4.   

    C/S结构的系统,跟B/S结构不一样,如果同样执行一个耗时的操作,浏览器可以点其他按钮取消操作,底下还有进度条,退一步说起码还能点个停止,用户体验较好。要是C/S结构的程序,就一个线程,那UI都没反应了,就跟死了一样,连个提示都没有,所以,在C/S程序里耗时的操作都需要使用多线程,主要还是为了用户体验。
      

  5.   

    多线程,主要是想提高程序的可伸缩性。例如,有很多任务需要并行进行,那么可能需要多线程。
    多线程实际上是一个假象,就是说,因为CPU的时间总是有限的,那么CPU需要频繁地切换,在某个时间执行某个线程的任务。这种情况,如果用的不好,反而增加了CPU的负担,降低了系统性能。
    直接创建Thread对象,并且调用它的Start方法
    使用ThreadPool.QueueUserWorkItem方法
    使用 BackgroundWorker————————————————以前在别人帖子里看来的,摘录给你
    用不用的理由以及应对方法楼上都讲了
      

  6.   

    程序工作分为默认阻塞 和主动阻塞。主动阻塞:thread.sleep(1000) //主动阻塞1000毫秒。如果当前只有1个线程,那么这个程序就在这里干等1秒钟。 白白浪费CPU时间。但是,通常情况我们写这样的代码的目的并不是为了让CPU去干等。等待1秒的目的是1个线程的while循环的结束,让其释放点资源给其他线程使用。默认阻塞:当你在操作数据库的时候 //这个时候,操作未完成,数据库需要运算。如果需要1000毫秒,那么你就要等待1000毫秒。如果这个时候你的程序就只有可怜的1跟线程,那么很可怕....你的程序的效率将会很低,cpu在那干等,什么事情都没干。 这个时候你可以考虑适当增加线程,把数据库操作 和 其他操作的线程分割开来,以免数据库把你的程序默认阻塞的时候 让你白白的干等。默认阻塞还包含以下情况:做网络通信的时候的通信等待,I/O操作时候的操作等待,大量数据运算时候的运算等待,等等等等,这类操作通常都单启动n个线程去执行(当然,前提是满足需要的情况下尽可能减少线程),以错开系统瓶颈,让A,B,C 3件事情并行执行。而并行执行并不意味以上是数据库相关应用场景.具体到应用上其实最麻烦的不是 什么时候该用,而是对公共数据操作的同步问题,这个是多线程编程比较难的地方——————————————————继续摘录