LINUX.ORG.RU

Сообщения dmitry1204

 

Проблема с WinForms под Mono

Я использую в своем приложении библиотеку Gwen для получения гуев в OpenTK. Однако для чтения и записи файлов в этой библиотеке используется методы, основанные на Windows.Forms Метод для загрузки файла выглядит так:

public static bool FileOpen(String title, String startPath, String extension, Action<String> callback)
        {
            var dialog = new OpenFileDialog
                             {
                                 Title = title,
                                 InitialDirectory = startPath,
                                 DefaultExt = @"*.*",
                                 Filter = extension,
                                 CheckPathExists = true,
                                 Multiselect = false
                             };
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                if (callback != null)
                {
                    callback(dialog.FileName);
                }
            }
            else
            {
                if (callback != null)
                {
                    callback(String.Empty);
                }
                return false;
            }

            return true;
        }
Проблема в том, что вызванный таким образом диалог не закрывается после использования, а остается висеть в виде зависшего окна. Остальное приложение при этом продолжает работать. Вызов нового подобного диалога приводит к тому, что первый исчезает, а новый работает нормально. Он тоже зависает, когда должен был закрыться. Похоже, что эта проблема никак не связана с самой библиотекой Gwen. В простом консольном приложении получается тоже самое:
public static void Main (string[] args)
{
//создаем диалог
	System.Windows.Forms.OpenFileDialog oFD = new System.Windows.Forms.OpenFileDialog ();
	oFD.InitialDirectory = ".";
	oFD.Filter = "(*.txt)|*.txt|All files (*.*)|*.*";
	oFD.FilterIndex = 2;
	oFD.RestoreDirectory = false;
//выводим диалог и пишем в консоль результат 
	Console.WriteLine (oFD.ShowDialog ());
//ожидаем нажатие в консоли, при этом диалог должен закрыться, но он "залип"
	Console.ReadKey ();
}
Эта проблема наблюдается только при запуске под Линуксом. В Винде вроде все нормально. Что я делаю не так?

 ,

dmitry1204
()

проблема с OpenTk под Mint

Возникла проблема с использованием библиотеки GLWigdet при разработке на MonoDevelop. В ней есть такой код:

// IWindowInfo
if (Configuration.RunningOnWindows)
{
	IntPtr windowHandle = gdk_win32_drawable_get_handle(GdkWindow.Handle);
	windowInfo = OpenTK.Platform.Utilities.CreateWindowsWindowInfo(windowHandle);
}
else if (Configuration.RunningOnMacOS)
{
	IntPtr windowHandle = gdk_x11_drawable_get_xid(GdkWindow.Handle);
	bool ownHandle = true;
	bool isControl = true;
	windowInfo = OpenTK.Platform.Utilities.CreateMacOSCarbonWindowInfo(windowHandle, ownHandle, isControl);
}
else if (Configuration.RunningOnX11)
{
	IntPtr display = gdk_x11_display_get_xdisplay(Display.Handle);
	int screen = Screen.Number;
	IntPtr windowHandle = gdk_x11_drawable_get_xid(GdkWindow.Handle);
	IntPtr rootWindow = gdk_x11_drawable_get_xid(RootWindow.Handle);

	IntPtr visualInfo;
	if (graphicsMode.Index.HasValue)
	{
	XVisualInfo info = new XVisualInfo();
	info.VisualID = graphicsMode.Index.Value;
	int dummy;
	visualInfo = XGetVisualInfo(display, XVisualInfoMask.ID, ref info, out dummy);
	}
	else
	{
		visualInfo = GetVisualInfo(display);
	}

	windowInfo = OpenTK.Platform.Utilities.CreateX11WindowInfo(display, screen, windowHandle, rootWindow, visualInfo);
	XFree(visualInfo);
}
else throw new PlatformNotSupportedException();

На сколько я понимаю, в моем случае должен срабатывать последний вариант else if (Configuration.RunningOnX11), однако этого не происходит. Сам OpenTK.Configuration выглядит так:

OpenTK.Configuration	OpenTK.Configuration        	<type>
RunningOnAndroid    	false                       	bool
RunningOnLinux      	true                        	bool
RunningOnMacOS      	false                       	bool
RunningOnMono       	true                        	bool
RunningOnSdl2       	false                       	bool
RunningOnUnix       	true                        	bool
RunningOnWindows    	false                       	bool
RunningOnX11        	false                       	bool
utsname             	OpenTK.Configuration.utsname	<type>
Non-public members  	                            	
Не могу понять, что не так. Собственно проблема возникла на домашнем компе. На другой машине с той же опперационкой RunningOnX11 имеет значение true. Подскажите, как быть.

 , , opentk,

dmitry1204
()

RSS подписка на новые темы