здесь у меня есть класс, который обновляет фон и элементы холста. Я хочу сделать фоновое обновление отдельно от элементов, так как обновление элементов занимает совсем немного, но когда я использовал потоки, я не заметил какая-то разница, и когда я остановился один из них оба они получили паузу, так что я предполагаю, что оба находятся на одной и той же теме здесь кодтемы не начинаются одновременно
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, просто позволяя другому потоку получить доступ к пользовательскому интерфейсу, теперь я его получу, я отредактирую код, соответственно, спасибо –
@AmgadSerry. Вы можете получить дополнительную информацию о том, как работает Диспетчер: http: // tech.pro/tutorial/800/working-with-the-wpf-dispatcher – nkoniishvt
спасибо @nkoniishvt –