0
这里我有一个类更新画布背景和元素,我想从元素分开进行背景更新,因为元素更新需要相当多的时间,但是当我使用线程时,我没有注意到任何区别,当我停下其中之一两者得到了暂停,所以我想两者是相同的线程在这里你是不是在这里多线程代码线程不会同时开始
namespace
{
class CanvasHandler
{
private Canvas _canvas;
private Grid gird;
private Brush _image;
private UiHandler uiHandler;
private Thread thread,thread1;
public CanvasHandler(Canvas canvas, UiHandler uiHandler)
{
this._canvas = canvas;
this.uiHandler = uiHandler;
this.gird = this._canvas.Parent as Grid;
}
public void Update()
{
thread = new Thread(UpdateImage);
thread.Start();
thread1 = new Thread(UpdateCanvas);
thread1.Start();
}
public void UpdateImage()
{
this._canvas.Dispatcher.BeginInvoke((Action)(() => this._canvas.Background = uiHandler.SourceCanvas.Background));
}
public void UpdateCanvas()
{
this._canvas.Dispatcher.BeginInvoke((Action)(UpdateCanvas_));
}
private void UpdateCanvas_()
{
Thread.Sleep(500);
this._canvas.Children.Clear();
foreach (UIElement child in uiHandler.SourceCanvas.Children)
{
var clone = Clone(child);
this._canvas.Children.Add(clone);
}
}
public T Clone<T>(T source)
{
string objXaml = XamlWriter.Save(source);
var stringReader = new StringReader(objXaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
var t = (T)XamlReader.Load(xmlReader);
return t;
}
}
}
我认为当我使用调度员IAM只是让另一个线程访问用户界面我现在得到它我将编辑我的代码相应谢谢 – 2014-12-13 18:10:57
@AmgadSerry你可以得到更多关于Dispatcher如何在这里工作的信息:http:// tech.pro/tutorial/800/working-with-the-wpf-dispatcher – nkoniishvt 2014-12-13 18:13:39
谢谢@nkoniishvt – 2014-12-13 18:29:26