C#WinformでAndroidのようなListenerを実現
5962 ワード
この例では、C#がWinformを用いてAndroidのようなListenerを実現する方法について説明します.非常に実用的なテクニックです.具体的な実現方法は以下の通りである.
まずICallBackListenerインタフェースで、Listenが必要な方法を書きます.次に、ワーククラスに似たControllerクラスで、具体的な機能はここで実現できます.
実装コードは次のとおりです.
次に、このクラスをどのように使用するか、簡単にWinformを作成し、Buttonを停止し、TextBoxを印刷します.具体的な使い方にはコメントが!みんなが理解しやすい.
コードは次のとおりです.
本明細書で述べた例は、C#プログラム設計に役立つことを期待します.
まずICallBackListenerインタフェースで、Listenが必要な方法を書きます.次に、ワーククラスに似たControllerクラスで、具体的な機能はここで実現できます.
実装コードは次のとおりです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Listener
{
///
/// ( Listener)
///
public interface ICallBackListener
{
void onCallBack();
bool onCallBack(string pWhat);
}
///
/// ,
///
public class Controller
{
//
private Thread mThread;
// Flag
private bool mFlagWhile;
private bool mFlagDoWork;
// Listener (Android vector)
private List mListenerList;
public Controller()
{
// Listener
mListenerList = new List();
//
mThread = new Thread(work);
mFlagWhile = true;
mFlagDoWork = true;
}
///
///
///
private void work()
{
while (mFlagWhile)
{
Thread.Sleep(3000);
if (mFlagDoWork)
{
//
//
ActiveOnCallBack();
}
Thread.Sleep(3000);
if (mFlagDoWork)
{
//
//
ActiveOnCallBack("Test");
}
}
}
///
/// Controller
///
public void Start()
{
if (mFlagWhile)
mThread.Start();
}
///
/// Controller
///
public void Stop()
{
mFlagWhile = false;
mFlagDoWork = false;
mThread.Abort();
}
///
/// onCallBack()
///
private void ActiveOnCallBack()
{
if(mListenerList!=null)
foreach (ICallBackListener tCallBack in mListenerList)
{
tCallBack.onCallBack();
}
}
///
/// onCallBack(string)
///
///
private void ActiveOnCallBack(string pWhat)
{
if (mListenerList != null)
foreach (ICallBackListener tCallBack in mListenerList)
{
tCallBack.onCallBack(pWhat);
}
}
///
/// Listener
///
/// ICallbackListener
public void setOnListener(ICallBackListener pCallBackListener)
{
if (pCallBackListener != null)
mListenerList.Add(pCallBackListener);
}
///
/// Listener
///
/// ICallbackListener
public void removeOnListener(ICallBackListener pCallBackListener)
{
if (pCallBackListener != null)
mListenerList.Remove(pCallBackListener);
}
}
}
次に、このクラスをどのように使用するか、簡単にWinformを作成し、Buttonを停止し、TextBoxを印刷します.具体的な使い方にはコメントが!みんなが理解しやすい.
コードは次のとおりです.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Listener;
namespace EventTest
{
// Form ICallBackListener
public partial class FormTest : Form, ICallBackListener
{
// UI
private delegate void DelegateTextBox(string pString);
//
private Controller mController;
public FormTest()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// , ,
mController = new Controller();
mController.setOnListener(this);
mController.Start();
}
// Override
public void onCallBack()
{
//
if (InvokeRequired)
{
textBox1.Invoke(new DelegateTextBox(pushTextInTextbox), new object[] { null });
}
}
// Override
public bool onCallBack(string pWhat)
{
//
if (InvokeRequired)
{
textBox1.Invoke(new DelegateTextBox(pushTextInTextbox), new object[] { pWhat });
}
return false;
}
private void button1_Click(object sender, EventArgs e)
{
//
mController.Stop();
}
///
/// , Invoke UI
///
/// string
private void pushTextInTextbox(string pText)
{
if (pText != null)
{
textBox1.Text += "
:" + pText;
}
else
{
textBox1.Text += "
!";
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mController.Stop();
}
}
}
本明細書で述べた例は、C#プログラム設計に役立つことを期待します.