Код, который вы ищете, это:
int[][,] rarr = new int[2][,];
rarr[0] = new int[100, 100];
rarr[1] = new int[100, 100];
Или, в более общем смысле, это:
int[][,] rarr = new int[2][,];
for (int i = 0; i < 2; i++)
rarr[i] = new int[100, 100];
Ваш код пытается выделить 3 различных массива в один строка кода - что вы не можете сделать. Как будто вы пытаетесь сделать то же самое, что и этот недопустимый фрагмент кода:
List<Dictionary<string, string>> x = new List<new Dictionary<string, string>()>();
Я чувствую, что из вашего описания вы действительно хотите этого:
int[,][] rarr = new int[100,100][];
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
rarr[i, j] = new int[2];
Можно получить это уведомление с помощью сообщения WM_WTSSESSION_CHANGE. Необходимо уведомить Windows, что Вы хотите получить эти сообщения через WTSRegisterSessionNotification и не зарегистрироваться в WTSUnRegisterSessionNotification.
Эти сообщения должны быть полезными для реализации C#.
http://pinvoke.net/default.aspx/wtsapi32.WTSRegisterSessionNotification
http://blogs.msdn.com/shawnfa/archive/2005/05/17/418891.aspx
http://bytes.com/groups/net-c/276963-trapping-when-workstation-locked
Событие SessionSwitch может быть Вашим лучшим выбором для этого. Проверьте, что SessionSwitchReason прошел через SessionSwitchEventArgs для обнаружения, какой переключатель это, и реагируйте соответственно.
Вам абсолютно не нужен WM_WTSSESSION_CHANGE, Просто используют внутреннюю пчелу WTTS.