解决方案 »

  1.   

    用多线程可以解决。你读取txt文件,还跟你的读取方式有关;操作控件,必须从创建控件的线程中操作它。
    http://www.baidu.com/link?url=R1yEXT1WF-gmOgldlD1c7erxXAo5eF_zpkmiS5E5hiQ48FvK9GJa2LsMSwGAXTpI_eNWcd8dIV3k-DO1pJ8G0_&wd=多线程使用&tn=baidu&ie=utf-8&inputT=3790
      

  2.   

     使用backgroundWorker类可以解决此问题。 baidu一下有不少例子。
      

  3.   

    只要一个工作线程就可以了,多了反而慢。用Invoke委托更新界面。
      

  4.   

    如果主线程处于wait状态,是不能用子线程更改界面UI的。
      

  5.   

    给你写一个demo,你自己根据你的情况修改一下using System;
    using System.IO;
    using System.Threading;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private static string Path = "..\\..";        private void Form1_Load(object sender, EventArgs e)
            {
                Find(new DirectoryInfo(Path), "b");
            }        private void Find(DirectoryInfo dir, string str)
            {
                foreach (var file in dir.EnumerateFiles())
                {
                    var f = file;
                    ThreadPool.QueueUserWorkItem(h =>
                    {
                        var content = File.ReadAllText(f.FullName);
                        if (content.Contains(str))
                            this.listBox1.BeginInvoke(new Action(() =>
                            {
                                this.listBox1.Items.Add(f.FullName);
                            }));
                    });
                }
                foreach (var subdir in dir.GetDirectories())
                    Find(subdir, str);
            }
        }
    }这里,在Form1里边拖入一个 ListBox 控件,然后在运行时去显示当前工程下所有包含特定字符串的文件的路径。
      

  6.   

    你可以为你的工程(下面的某个目录里)拖入几十个测试文件,看看它如何并行地查找的。对于目录的漫游不是并行的,但是对于同一个目录下的文件的查找是(准)并行的。这里使用到了“系统线程池”,它会自动根据你的windows系统情况而调度并行数量,同时执行的线程数不会过多,但是也不至于只用少得没有意义的几个线程。
      

  7.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Threading;
    namespace 瞬网
    {
        
        public partial class Form1 : Form
        {
            int i = 0;
            string sLine;
            public Form1()
            {
                InitializeComponent();
                xEngine.License.Init("瞬网");
            }
            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Enabled = true;
                timer1.Interval = 2000;
                Thread thread = new Thread(run);
                thread.Start();
            }
            public void run()
            {
                xEngine.Execute.Http execute = new xEngine.Execute.Http();
                execute.LoadScript("瞬网.x", false);            execute.Account.Account = textBox1.Text;            execute.Account.Password = textBox2.Text;
                string[] files = Directory.GetFiles(@"C:\Users\admin\Desktop\data", "*.txt");
                if (i >= files.Count())
                {
                    i = 0;
                }
                //  Random r=new Random();
                string flist = files[i];
                FileStream f = new FileStream(flist, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(f);
                execute.Account.Other1 = sr.ReadLine();
                execute.Account.Other3 = sr.ReadToEnd() + execute.Account.Other2;
                StreamReader myStream = null;
                myStream = new StreamReader(flist);
                while (true)
                {
                    sLine = myStream.ReadLine();//一行一行的读,如果前面的数据部需要就直接抛弃了
                    if (myStream.EndOfStream)
                    {//现在这个sLine 就是最后一行了
                        break;
                    }
                }
                execute.Account.Other2 = sLine;
        
                richTextBox1.Text = "正在发布第" + i + "篇文章";
                i++;
                sr.Close();
                f.Close();
                var response = execute.RunRequests();
                string str = response.GetBodyStr();            if (str.Contains("0"))
                {
                    label6.Text = "发布成功";
                }
                else
                {
                    label6.Text = "发布失败";
                }
            }
            
            private void timer1_Tick(object sender, EventArgs e)
            {
                
                button1_Click(null, null);
            }
    }
     }具体代码是这样的,我就想改下用线程来实现,但是小弟不才,不大会用线程,还请大神帮帮忙
      

  9.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。
    使用控件的InvokeRequired 属性来区分是不是 创建该控件线程以为的线程操作它。
      

  10.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。
    使用控件的InvokeRequired 属性来区分是不是 创建该控件线程以为的线程操作它。不懂
      

  11.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。
    使用控件的InvokeRequired 属性来区分是不是 创建该控件线程以为的线程操作它。不懂
    你总是不懂? 不自己去找列子,尝试写代码,你永远不懂。
      

  12.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。
    使用控件的InvokeRequired 属性来区分是不是 创建该控件线程以为的线程操作它。不懂
    你总是不懂? 不自己去找列子,尝试写代码,你永远不懂。
    教导的是,我在看着例子呢,呵呵~准备写代码,谢谢提醒
      

  13.   

    谢谢,我就是用一个线程,但是它提示不能操作什么窗体控件,      Invoke委托更新界面,这个我不懂。www.google.com
      

  14.   

    看来你也是个新手哦。
    http://www.cnblogs.com/txw1958/archive/2012/08/21/csharp-crossthread-widget.html其实我也是新手。