Какое-либо решение Недопустимого Перекрестного Операционного исключения Потока?

int** ary = new int[sizeY][sizeX]

должен быть:

int **ary = new int*[sizeY];
for(int i = 0; i < sizeY; ++i) {
    ary[i] = new int[sizeX];
}

, а затем очистить будет:

for(int i = 0; i < sizeY; ++i) {
    delete [] ary[i];
}
delete [] ary;

EDIT: как отметил Дитрих Эпп в комментариях, это не совсем легкое решение. Альтернативным подходом было бы использование одного большого блока памяти:

int *ary = new int[sizeX*sizeY];

// ary[i][j] is then rewritten as
ary[i*sizeY+j]
18
задан Paul Ratazzi 22 December 2017 в 19:05
поделиться

4 ответа

Поскольку у меня нет тестового сценария для движения от, я не могу гарантировать это решение, но мне кажется, что сценарий, подобный тому раньше, обновлял индикаторы выполнения в различных потоках (используйте делегата), подошло бы здесь.

public delegate void DataBindDelegate();
public DataBindDelegate BindData = new DataBindDelegate(DoDataBind);

public void DoDataBind()
{
    DataBind();
}

, Если привязка данных должна быть сделана особым потоком, то позволенный, что поток делает работу!

1
ответ дан 30 November 2019 в 09:42
поделиться

Необходимо смочь сделать что-то как:

if (control.InvokeRequired)
{
    control.Invoke(delegateWithMyCode);
}
else
{
    delegateWithMyCode();
}

InvokeRequired является свойством на Средствах управления, чтобы видеть, находитесь ли Вы на корректном потоке, затем Вызовите, вызовет делегата на корректный поток.

ОБНОВЛЕНИЕ: На самом деле в моем последнем задании мы сделали что-то вроде этого:

private void SomeEventHandler(Object someParam)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
    }

    // Regular handling code
}

, который еще устраняет необходимость блок и отчасти ужесточает код.

4
ответ дан 30 November 2019 в 09:42
поделиться

В WPF и Silverlight обязательная инфраструктура заботится о переключении на поток UI.

0
ответ дан 30 November 2019 в 09:42
поделиться

Если вызов потока "недопустим" (т.е. средства управления влиянием вызова DataBind, которые не были созданы в потоке, которым это называют от), затем, необходимо создать делегата так, чтобы, даже если решение / подготовка к DataBind не сделано в создающем управление потоке, любая результирующая модификация их (т.е. DataBind ()) была.

Вы назвали бы мой код от рабочего потока как так:

this.BindData.Invoke();

Это затем заставило бы исходный поток делать привязку, которая (предположение это - поток, который создал средства управления), должен работать.

0
ответ дан 30 November 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: