Microsoft MVP성태의 닷넷 이야기
글쓴 사람
Sungwoo Park (musicbox3 at nate.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

라즈베리파이 GPIO를 컨트롤 하는 프로그램을 작성했더니 신호에 따라 컨트롤은 잘 되었습니다.
하지만 받은 값을 textBox에 전달하려 하는데 잘 안됩니다.
namespace echo_Server
 {

    /// <summary>
     /// </summary>
     public sealed partial class MainPage : Page
     {
         
         public MainPage()
         {
             
             this.InitializeComponent();
             acho_sever();
             achoclient();
            
         }
         private async void acho_sever()
         {
             try
             {
                 //Create a StreamSocketListener to start listening for TCP connections.
                 Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();

                //Hook up an event handler to call when connections are received.
                 socketListener.ConnectionReceived += SocketListener_ConnectionReceived;

                //Start listening for incoming TCP connections on the specified port. You can specify any port that's not currently in use.
                 await socketListener.BindServiceNameAsync("1337");
                 
             }
             catch (Exception e)
             {
                 //Handle exception.
                 
             }

        }
         private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender,
     Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
         {
             //Read line from the remote client.
             Stream inStream = args.Socket.InputStream.AsStreamForRead();
             StreamReader reader = new StreamReader(inStream);
             string request = await reader.ReadLineAsync();
            //try //일단 익셉션처리를 해보았습니다. 익셉션 에러는 안났는데요
            //{
            // textBox.Text = request; //여기도
            //}
            //catch (COMException)
            //{
            // textBox.Text = request; //또 여기에 넣어봐도 텍스트 박스가 반응을 안합니다.
            //}
            //Send the line back to the remote client.
             Stream outStream = args.Socket.OutputStream.AsStreamForWrite();
             StreamWriter writer = new StreamWriter(outStream);
//리턴값으로 돌려서 값을 반환하고 싶지만 void라 할 수 ㅇ없었습니다. 이런저런 시도를 해봤지만 실패했습니다.
어떻게 해서 출력하면 좋을까요?

            await writer.WriteLineAsync(request);
            await writer.FlushAsync();
         }


[연관 글]






[최초 등록일: ]
[최종 수정일: 12/4/2015]


비밀번호

댓글 작성자
 



2015-12-07 12시13분
예외가 발생하지 않았다면 실제로 request에는 빈 문자열이 있을 가능성이 있습니다. 확인해 보셨나요? ReadLineAsync 한번만 호출했으니 가장 처음의 라인을 가져왔다는 것이고 그것이 개행만 포함된 빈 문자열일 수 있습니다. (디버그 모드로 실행해서 request 변수에 들어간 내용을 확인해 보세요.)
정성태
2015-12-07 08시11분
[박성우] 답변 감사합니다. 제가 실제로 이 소스로 GPIO를 제어했습니다.
Stream inStream = args.Socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(inStream);
            string request = await reader.ReadLineAsync();
            try
            {
                test = request;
            }
            catch (COMException) {}
            // 이 부분을 추가해서 확인해 보았습니다. 클라이언트로 b를 입력해서 보내니까 제가 미리 선언해 놓은 pin번호 LED에 불이 들어왔으며 b를 제외한 다른 문자열을 넣으니까 불이 꺼졌습니다.
            if (request.Equals("b"))
            {
                pin.Write(GpioPinValue.High);
            }
            else
            {
                pin.Write(GpioPinValue.Low);
            }
그 부분에서 빈 문자열이 아닌 것은 확신 할 수 있습니다. 어떻게 할지 모르겠어서 겟터와 셋터를 만들어서도 사용해보려 했는데 뭔가 SocketListener_ConnectionReceived 이 클래스 안에만 들어가면 다른곳에서 선언된 것들은 사용하려 할때마다 예외 상황이 뜨거나 global::System.Diagnostics.Debugger.Break();여기가 노랗게 되네요.
[guest]
2015-12-07 08시23분
[박성우] try {textBox.Text = request;}
catch (COMException){textBox.Text = request;}
일단 request에는 값이 들어오는 것은 확인 되었습니다. 하지만 text박스에 아무런 변화가 없는 것으로 봐서 try catch는 무시 되고 있는 것 같습니다.
[guest]
2015-12-07 02시09분
다음부터는 ^^ 예외가 발생하는 코드는 다음과 같이 해서 메시지를 출력해 보세요.

try
{
} catch (Exception e)
{
  System.Diagnostics.Debug.WriteLine(e.ToString());
}

그럼, Output 창에서 다음과 같은 메시지를 볼 수 있고,

System.Exception: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
   at Windows.UI.Xaml.Controls.TextBox.put_Text(String value)
   at App1.MainPage.<SocketListener_ConnectionReceived>d__2.MoveNext()

이 메시지를 올려주셨다면 좀더 쉽게 답변을 드릴 수 있었을 것입니다. 답은 다음의 글을 참고하세요. ^^

The application called an interface that was marshalled for a different thread in window 8
; http://stackoverflow.com/questions/11218911/the-application-called-an-interface-that-was-marshalled-for-a-different-thread-i
정성태
2015-12-08 12시35분
예 말씀해주신대로 참고해서 작성해 넣었더니 잘 됩니다. 감사합니다. 앞으로는 예외 메세지를 같이 출력해서 확인해보겠습니다. 정말 감사합니다.
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                textBox.Text = request;
            }).AsTask().Wait();
Sungwoo Park

1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5947Roya8/7/20249488c# dll을 cpp lib에서 사용을 할려고 하는데요. CoCreateInstance 에서 지정된 파일을 찾을수 없다고 나오는대요. [4]
5946SunN...8/5/20249743TaskDefinition 에서 사용저가로그온상관없이실행 [3]파일 다운로드1
5945SunN...8/3/20249696윈도우 작업스케줄러 [1]
5944roya8/1/202410056C# dll을 C++ 프로젝트에서 사용을 하고 싶은데, 레지스트리 등록 없이 가능한걸까요?? [2]
5943SunN...8/1/202410217윈도우C#에서 리눅스FTP로 업로드 및 리눅스에 폴더생성(WindowsOS에서C#으로) [3]
5942vict...7/24/20249306dll 을 c#에서 쓰고 싶습니다 [1]
5941vict...7/17/202412509DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 오류 [2]
5940ckm7/16/202412609선생님 안녕하세요 async await 교착 관련 질문입니다 [1]
5939괴물신인7/9/202412805템플릿 대체할수있는방법이 있을까요? [6]
5938씨제바보7/5/202410471책 질문드립니다. [1]
5937Thor... donator5/27/202411812C# 12 는 전자책이 언제쯤 나오게 될까요? [1]
5936ds4/26/202412711활성화 되어 있는 커뮤니티 발견하게 되어 기분이 좋습니다. 자주 놀러 올께요. (내용 없습니다. [2]
5935양승조 donator4/25/202412318Reflection 관련 질문 드립니다. [5]파일 다운로드1
5934양승조 donator4/24/202411591Reflection 관련 질문 드립니다. [1]
5933vict...4/23/202411168cpp 라이브러리 디버깅 방법 문의 드립니다. [1]
5932EK4/12/202410864다음 제네릭에서 널익셉션이 뜨는 이유를 알수있을까요? [1]
5931이대희4/2/202412521Windows 앱 SDK C# 템플릿의 용도가 무엇인지요? [1]
5930vict...2/22/202414433ef core, FromSqlRaw 맵핑 질문입니다. [4]
5929a2/17/202413272.Net 8 에서 디버거 변경 [1]
5928vict...2/5/202413815wpf에서 대량 데이터 보여주는 방법 추천 부탁드립니다. [1]
5926엄태영1/12/202414529잘못된 Task 사용으로 인한 데드락 관련 질문 입니다. [3]
5925Euni...12/22/202312435Visual Studio에서 nodejs 사용시 npm install -g @vue/cli 실행시 오류 [1]
5924Euni...12/21/202313570Visual Studio에서 nodejs 사용시 C:\Program Files\nodejs\\node.exe" "C:\Program Files\nodejs\\node_modules\npm\bin\npm-cli.js" prefix -g 를 찾지 못하는 설치 오류 [2]
5923정두호12/4/202312947MSSQL 데이터 전송과 공유폴더의 데이터 전송 차이점 [1]
5922Heeg...10/27/202315379C++의 double pointer를 C#에서 구현하는 방법이 잘 안됩니다. [3]
5921한예지 donator10/3/202315347마샬링 정의 및 목적이 궁금합니다. [5]
1  [2]  3  4  5  6  7  8  9  10  11  12  13  14  15  ...