私はVC++ 2008フォームアプリケーションとアンマネージドソケット通信コードを持っています。私はフォームに通信メッセージを表示したい。上記のエラーを回避するために、代理人メソッドを追加し、Invoke呼び出しを使用しました。しかし、私はまだ上記のエラーになります。誰でも私のコードを修正するのを助けることができますか?なぜ依然としてクロススレッド操作がデリゲートのInvokeで有効なエラーではないのですか?
これはをForm1ヘッダーファイルある:方法は別のクラスから呼び出される)
#include "stdafx.h"
#include "SocketClientForm.h"
using namespace SocketClientFormApp;
void Form1::appendMsg(String^ msg)
{
updateHandler->Invoke(msg);
}
void Form1::updateLogMsg(String^ msg)
{
msgDisplayBox->AppendText(msg);
}
appendMsg(:これはをForm1のCPPファイルある
#pragma once
#include "SocketClientMgr.h"
class SocketClientMgr;
namespace SocketClientFormApp {
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
updateHandler = gcnew ProgressHandler(this, &SocketClientFormApp::Form1::updateLogMsg);
}
protected:
~Form1()
{
}
private:
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
}
#pragma endregion
///////////////////////////////////
private: delegate void ProgressHandler(String^ msg);
static ProgressHandler^ updateHandler;
public: void appendMsg(String^ msg);
public: void updateLogMsg(String^ msg);
};
}
の別のスレッド。
EIDT:
静的ProgressHandler^updateHandler。静的にすべきではない、それはプライベート
エラーがupdateLogMsg()で起こったあるべき