지도를 생성하려고합니다. 나는 접근 가능하고 접근 할 수없는 부분을 나타내는 2D 불린 배열을 만들었다. 이제 캔버스에 여러 개의 직사각형을 그리려하고 있습니다. 내가 뭘 잘못하고 있는지 전혀 모르겠다.다중 작업에서 캔버스에 액세스하기
private void GenerateMapParallel(Canvas cMap)
{
cMap.Children.Clear();
var task1 = Task.Factory.StartNew(() => Generate(0, 330, cMap));
var task2 = Task.Factory.StartNew(() => Generate(331, 660, cMap));
Task.WaitAll(task1, task2);
}
private void Generate(int start, int stop, Canvas cMap)
{
for (int i = start; i < stop; i++)
{
for (int j = 0; j < Map.instance.height; j++)
{
if (Map.instance.map[i, j] == false)
{
if(cMap.Dispatcher.CheckAccess())
{
cMap.Children.Add(new Rectangle() { Width = 1, Height = 1, Margin = new Thickness(i, j, 0, 0), Fill = Brushes.Gray });
}
else
{
cMap.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => { cMap.Children.Add(new Rectangle() { Width = 1, Height = 1, Margin = new Thickness(i, j, 0, 0), Fill = Brushes.Gray }); }));
}
}
}
}
}
어딘가에 무한 루프처럼 응용 프로그램이로드되지 않습니다. Task1은 첫 번째 상위 절반을 생성하고 Task2는 하위 절반을 생성합니다. 어떤 아이디어를 더 잘하는 방법? 나는 TPL에 새로운 사람입니다.
와 동 기적으로 발송자에 비동기 작업을 호출 대신하는 것입니다 루프는 병렬로 변환 할 수 있습니다 .ForEach 루프 – Sievajet
사용중인 .Net 버전은 무엇입니까? – i3arnon
나는 각각에 대해 병렬을 사용할 수 있지만 작업으로해야한다고 알고 있습니다. .Net 4,5 – Safiron