vb.net - Trying to create an application to pick up text on a timer but files are in use and timer doesn't work -
i trying create 'chat' application in vb.net , - being rather new programming - struggling 2 issues preventing program running.
the main purpose of program create file called chat_server.txt user can create/open. text file written first textbox (called server_text). @ point user can type text second textbox (called client_text) , press 'send' button writes chat_server.txt contents of box.
the main goal of program 2 or more copies can running on different computers , communicate on shared network without having go external server. first problem program can’t open file. visual studio says file being used process.
my second problem text in server_text textbox isn't updating other users on different computers press send button. tried overcome using timer , isn't working reason. i've tried filesystemwatcher , doesn't work either.
here's code (bearing in mind form, not console):
imports system.io public class chat dim file_name string sub chat_load(byval sender system.object, byval e system.eventargs) handles mybase.load end sub sub create_server_click(byval sender system.object, byval e system.eventargs) handles create_server.click 'this button on form user choose location save chat_server.txt savefiledialog1.showdialog() 'save file savefiledialog1.openfile() file_name = savefiledialog1.filename() 'get file path msgbox("server file made.") end sub sub connect_server_click(byval sender system.object, byval e system.eventargs) handles connect_server.click 'another button on form gets user choose chat_server.txt openfiledialog1.showdialog() 'open file file_name = openfiledialog1.filename() dim fileexists boolean 'tests whether file existx , whether works or not fileexists = my.computer.filesystem.fileexists(file_name) if fileexists = true try server_text.text = my.computer.filesystem.readalltext(file_name) catch ex exception msgbox("can't load file. try again.") end try else msgbox("chat can't seem find chat file. make sure called chat_server.txt , on accessible network.") end if end sub sub server_text_textchanged(byval sender system.object, byval e system.eventargs) handles server_text.textchanged server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub sub chat_text_textchanged(byval sender system.object, byval e system.eventargs) handles chat_text.textchanged server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub sub chat_text_keyup(byval sender object, byval e system.windows.forms.keyeventargs) handles chat_text.keyup 'another textbox holds text user wants send chat_server.txt if e.keycode = keys.enter 'when user presses enter send button clicked send.performclick() chat_text.clear() server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end if end sub sub send_click(byval sender system.object, byval e system.eventargs) handles send.click my.computer.filesystem.writealltext(file_name, vbcrlf & chat_text.text, true) 'when send button clicked, write contents of client_text chat_server.txt chat_text.clear() server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub private sub timer1_tick(byval sender system.object, byval e system.eventargs) handles timer1.tick server_text.text = my.computer.filesystem.readalltext(file_name) 'every 100 miliseconds, places text chat_server.txt main textbox end sub end class i grateful if this, been troubling me weeks now.
thanks, 08robertsj
like other answer said, need remove line. need create file , dispose after (so handles released). also, set timer lower 1000ms. created boolean variable check if connection has been made before file read timer. remember check timer enabled in settings.
here code:
imports system.io public class form1 dim file_name string dim connected boolean sub chat_load(byval sender system.object, byval e system.eventargs) handles mybase.load end sub sub create_server_click(byval sender system.object, byval e system.eventargs) handles create_server.click 'this button on form user choose location save chat_server.txt savefiledialog1.showdialog() 'save file 'savefiledialog1.openfile() file_name = savefiledialog1.filename() 'get file path savefiledialog1.dispose() file.create(file_name).dispose() msgbox("server file made.") connected = true end sub sub connect_server_click(byval sender system.object, byval e system.eventargs) handles connect_server.click 'another button on form gets user choose chat_server.txt openfiledialog1.showdialog() 'open file file_name = openfiledialog1.filename() dim fileexists boolean 'tests whether file existx , whether works or not fileexists = my.computer.filesystem.fileexists(file_name) if fileexists = true try server_text.text = my.computer.filesystem.readalltext(file_name) catch ex exception msgbox("can't load file. try again.") end try else msgbox("chat can't seem find chat file. make sure called chat_server.txt , on accessible network.") end if end sub sub server_text_textchanged(byval sender system.object, byval e system.eventargs) handles server_text.textchanged server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub sub chat_text_textchanged(byval sender system.object, byval e system.eventargs) handles chat_text.textchanged server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub sub chat_text_keyup(byval sender object, byval e system.windows.forms.keyeventargs) handles chat_text.keyup 'another textbox holds text user wants send chat_server.txt if e.keycode = keys.enter 'when user presses enter send button clicked send.performclick() chat_text.clear() server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end if end sub sub send_click(byval sender system.object, byval e system.eventargs) handles send.click my.computer.filesystem.writealltext(file_name, vbcrlf & chat_text.text, true) 'when send button clicked, write contents of client_text chat_server.txt chat_text.clear() server_text.text = my.computer.filesystem.readalltext(file_name) 'places text chat_server.txt main textbox end sub private sub timer1_tick(byval sender system.object, byval e system.eventargs) handles timer1.tick if connected server_text.text = my.computer.filesystem.readalltext(file_name) 'every 100 miliseconds, places text chat_server.txt main textbox end if end sub end class if want make proper program, should check out tcp examples in vb.net. here tutorial: http://www.codeproject.com/articles/38914/a-tcp-ip-chat-program
Comments
Post a Comment