Вы, по крайней мере, захотите попытаться избежать использования Windows Forms, поскольку это всего лишь тонкий слой бумаги поверх собственного пользовательского интерфейса Windows.
Mono несколько эмулирует его с помощью WINE, но я бы не стал этому доверять.
Моно сделал это некоторое время назад, но усилия были прекращены. См. WinForms на Mono для получения дополнительной информации. Спасибо jpobst .
Попробуйте использовать GTK # или Qt # (хотя я не слишком уверен, что последний действительно существует) для кроссплатформенной поддержки. Вы можете также рассмотреть возможность использования Java с SWT или даже Swing вместо C #, но это, вероятно, не будет вариантом, который вы готовы рассмотреть.
Использование чего-либо, связанного с P / Invoke, вероятно, также является плохой идеей, поскольку это вызывает собственный код, который, вероятно, не будет переносимым (если вы не напишите его самостоятельно, тогда вы можете сделать его переносимым).