C# 跨线程操作无效
亲爱的,当我尝试调用排序方法时,收到以下错误消息: 错误消息:跨线程操作无效:控件“lbStart\u Bubble”是从创建它的线程以外的线程访问的 这里有什么做得不对C# 跨线程操作无效,c#,winforms,multithreading,C#,Winforms,Multithreading,亲爱的,当我尝试调用排序方法时,收到以下错误消息: 错误消息:跨线程操作无效:控件“lbStart\u Bubble”是从创建它的线程以外的线程访问的 这里有什么做得不对 Thread thBubble = new Thread(new ThreadStart(bubbleSort)); thBubble.Start(); public void bubbleSort() { int row = 0, column = 0; start = new
Thread thBubble = new Thread(new ThreadStart(bubbleSort));
thBubble.Start();
public void bubbleSort()
{
int row = 0, column = 0;
start = new TimeSpan(System.DateTime.Now.Ticks);
lbStart_Bubble.Text = start.ToString();
this.lbStart_Bubble.Refresh();
for(row = 1; row <= list1.Length; row++)
{
for(column =0; column < list1.Length-1; column++)
{
Thread.Sleep(delay);
tbResult_Bubble.Clear();
for(int i=0; i<list1.Length; i++)
tbResult_Bubble.AppendText(list1[i] + " " );
if(list1[column]>list1[column+1])
swap(list1[column], list1[column+1], column, column+1);
}
display(list1);
}
end = new TimeSpan(System.DateTime.Now.Ticks);
lbEnd_Bubble.Text = end.ToString();
lbTotal_Bubble.Text = end.Subtract(start).ToString();
tbResult_Bubble.Clear();
for(int i=0; i<list1.Length; i++)
tbResult_Bubble.AppendText(list1[i] + " " );
}
Thread thBubble=new Thread(new ThreadStart(bubbleSort));
thBubble.Start();
public void bubbleSort()
{
int行=0,列=0;
start=newtimespan(System.DateTime.Now.Ticks);
lbStart_Bubble.Text=start.ToString();
这个.lbStart_Bubble.Refresh();
对于(row=1;row您不能通过与创建用户界面的线程不同的线程来驱动用户界面。请查看并使用它从后台线程驱动UI。您不能与创建并因此拥有该控件的线程不同的线程中的控件对话
首先,你不能这样使用标签
相反,您可以:
或:
区别在于,第一个线程将等到主线程(拥有标签的线程)执行完代码后(后台线程)才继续执行。如果它有一个常规的方法调用,它只会发生在不同的线程上
第二个线程只会向拥有标签的线程发送一封邮件,要求它执行代码段,然后不等待它。这可能很难做到正确,例如,如果在主线程开始执行该代码之前,背景线程中的start
发生了更改,该怎么办
我将使用Invoke,直到您在线程方面获得更多经验,然后再研究其他方法
或者,您可以使用具有安全地将进度消息发送回主线程的工具。您应该使用您正在使用的语言标记问题。看起来像Java吗?
lbStart.Invoke(new Action(() =>
{
lbStart_Bubble.Text = start.ToString();
}));
lbStart.BeginInvoke(new Action(() =>
{
lbStart_Bubble.Text = start.ToString();
}));