线程启动时,跨线程操作无效

时间:2014-01-10 18:41:13

标签: c# multithreading

我有一个方法

    public void splitXmlFile()
    {
        string[] line = Regex.Split(inputText.Text, "\n+");
        progressStt.Maximum = line.Length;
        progressStt.Step = 1;
        foreach (string q in line)
        {
            progressStt.performStep();
            if (Regex.IsMatch(q, "<[^>]*>"))
            {
                if (Regex.IsMatch(Regex.Split(q, "<[^>]*>")[0], @"\s"))
                {
                }
                string[] gettag = Regex.Split(q, "(<.*?>)|(.+?(?=<|$))");
                foreach (var gettag1 in gettag)
                {
                    if (Regex.IsMatch(gettag1, "<[^>]*>"))
                    {
                    }
                    else
                    {
                        if (Regex.IsMatch(gettag1, @"\w"))
                            listXml.Add(gettag1);
                    }
                }
            }
            else
            {
                if (Regex.IsMatch(q, @"\w"))
                    listXml.Add(q);
            }
        }
        progressStt.Value = 0;
    }

创建新主题:

  

线程t1 =新线程(新的ThreadStart(splitXmlFile)); t1.Start();

但是,当我开始时,我排除了异常:

string[] line = Regex.Split(inputText.Text, "\n+");

我认为它可以进来:

progressStt.Maximum = line.Length;
            progressStt.Step = 1;
progressStt.performStep();
progressStt.Value = 0;

我无法修复它,我该怎么办?

1 个答案:

答案 0 :(得分:0)

inputText.Text驻留在GUI线程上。您需要在线程开始之前传递数据,例如:

 newThread.Start(inputText.Text);

然后在线程方法中获取值。请参阅MSDN Thread.Start

我遇到了类似的问题并写了一篇题为C# WPF: Linq Fails in BackgroundWorker DoWork Event

的文章