C# 中止线程WPF C后从中的线程写入文本框
我使用消费者-生产者模型,并尝试在中止线程后写入文本框,但它向我显示了几个错误,我知道它无法从线程中完成。。。 这是我现在的一堆代码:C# 中止线程WPF C后从中的线程写入文本框,c#,wpf,multithreading,C#,Wpf,Multithreading,我使用消费者-生产者模型,并尝试在中止线程后写入文本框,但它向我显示了几个错误,我知道它无法从线程中完成。。。 这是我现在的一堆代码: void LaunchConsumer() { while (myReceivedMessage.Count!=8) { try { var sampleFromCollection = samples32Collection.Take();
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();
}
试试这个:
if (!MyTextBox.Dispatcher.CheckAccess())
{
MyTextBox.Dispatcher.Invoke(() => { MyTextBox.Text = myReceivedMessage.ToString(); });
}
else
{
MyTextBox.Text = myReceivedMessage.ToString();
}
错误呢?只要看看页面右侧的相关部分,你就会说,我懒得读它们。有人帮我做-1顺便说一句,如果你对新技术感兴趣,为什么要使用线程。任务、异步/等待代码使生活更简单。您好。例如,我的邮件包含0000000,但在文本框中显示:System.Collections.Generic.List1[System.String]`是的,这是正确的,因为您的myReceivedMessage具有列表类型