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;
}
}
}
나는 dispatcher iam을 사용하여 다른 스레드가 UI에 액세스하도록 허용 할 때 그에 맞게 코드를 편집 할 것이라고 생각했습니다. –
@AmgadSerry 여기에서 Dispatcher의 작동 방식에 대한 자세한 정보를 얻을 수 있습니다. http : // tech.pro/tutorial/800/working-with-the-wpf-dispatcher – nkoniishvt
감사합니다. @nkoniishvt –