【问题标题】:write to text box from a thread in after aborting thread WPF C# [duplicate]在中止线程WPF C#后从线程中写入文本框[重复]
【发布时间】:2015-07-16 20:03:03
【问题描述】:

我使用消费者生产者模型并在中止线程后尝试写入文本框,但它显示了几个错误,我理解它无法从线程中完成...... 这是我现在的一堆代码:

void LaunchConsumer()
    {
        while (myReceivedMessage.Count!=8)
        {
            try
            {

                var sampleFromCollection = samples32Collection.Take();   
                TempBuffer.RemoveAt(0);//Remove first object at TempBuffer
                TempBuffer.Add(sampleFromCollection);
                double TempFreq = (SampleRate *ZeroCrossRate(TempBuffer))/(2*TempBuffer.Count);
                //Zero = 387:392
                //One = 393:395
                int counter = myReceivedMessage.Count;
                if(12960.0<TempFreq && TempFreq<13040.0)
                {
                    myReceivedMessage.Add("0");
                    //MyTextBox.AppendText("0");
                    TempBuffer.Clear();
                    TempBuffer = new List<float>(Enumerable.Repeat(0f, (int)(SampleRate * BitTime)));
                }
                else if(13041.0<TempFreq && TempFreq<13131.0)
                {
                    myReceivedMessage.Add("1");
                    //MyTextBox.AppendText("1");
                    TempBuffer.Clear();                    
                    TempBuffer = new List<float>(Enumerable.Repeat(0f, (int)(SampleRate*BitTime)));
                }
                /*else
                {
                    myReceivedMessage.Clear();
                }*/



            }
            catch (InvalidOperationException) { }
        }

        myWaveIn.StopRecording();

        MyTextBox.Text = myReceivedMessage.ToString();//Here I get an error..
        Terminate();
    }


    void Terminate()    //Call this to terminate the consumer
    {
        consumer.Abort();

    }

【问题讨论】:

  • 错误怎么样?
  • 看看页面右侧的“相关”部分
  • 所以你说,“我懒得看它们。有人帮我做”。 -1 顺便说一句,如果您对新技术感兴趣,为什么要使用线程。任务、异步/等待代码让生活变得更简单。

标签: c# wpf multithreading


【解决方案1】:

试试这个:

if (!MyTextBox.Dispatcher.CheckAccess())
{
    MyTextBox.Dispatcher.Invoke(() => { MyTextBox.Text = myReceivedMessage.ToString(); });
}
else
{
    MyTextBox.Text = myReceivedMessage.ToString();
}

【讨论】:

  • 你好。我的消息包含“0000000”(例如),但在文本框中显示:System.Collections.Generic.List1[System.String]`
  • 是的,这是正确的,因为您的 myReceivedMessage 具有 List 类型
猜你喜欢
  • 2014-05-16
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2021-01-31
  • 2012-04-02
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多