ciao, no figurati, non mi scocci
se posso cerco sempre di dare il mio aiuto, a volte imparando anche io.
Alla tua domanda diretta provo a rispondere in maniera diretta :
agisci sul campo statico della program che contiene il form da modificare.
forse mi sta sfuggendo qualcosa, ma se ad esempio vuoi ottenere la ricezione della stringa nella Program, dovresti creare un campo statico che contiene il form che lanci, e quando ricevi la stringa agisci sul metodo del form dal campo statico.
quel che ti consigliavo io era di non utilizzare un campo statico nella program, ma ingloabare tutta la logica dentro il form, ma comunque avrai i tuoi motivi per volerlo li.
un doppio esempio (sia con ricezione in program , sia eventualmente ricezione su form) :
NB
al posto del timer puoi usare tranquillamente un thread separato che simula in modo asoincrono la ricezione della stringa come fai tu nella tua classe.
program.cs
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
namespace test2
{
static class Program
{
static Form1 form;//dichiaro un campo statico di tipo form1 che conterrà appunto il nostro form.
static Timer timer;
static int index;
static string[] listaWav;
/// <summary>
/// Punto di ingresso principale dell'applicazione.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
form = new Form1();//qui valorizzo il campo statico che conterrà il form
//commentando da gli spezzoni di codice racchiuso tra gli asterisco e togliendolo da quello dal Form1 ottieni lo stesso risultato
//*****************************************
timer = new Timer();
timer.Interval = 5000;
timer.Tick += new EventHandler(timer_Tick);
listaWav = Directory.GetFiles(Application.StartupPath, "*.wav");
if (listaWav.Length > 0)
{
form.CambiaMusica(listaWav[index++]);
timer.Enabled = true;
timer.Start();
}
//******************************************
Application.Run(form);
}
//*************************************************
static void timer_Tick(object sender, EventArgs e)
{
if (index < listaWav.Length)
{
//qui chiamo la modifica del form
form.CambiaMusica(listaWav[index]);
}
else timer.Stop();
index++;
}
//*************************************************
}
}
form1.cs
codice:
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 System.Media;
using System.IO;
namespace test2
{
public partial class Form1 : Form
{
SoundPlayer sp;
Timer timer;
string[] listaWav;
int index;
public Form1()
{
InitializeComponent();
index=0;
sp = new SoundPlayer();
this.BackColor = Color.Black;
//se togli il commento alle righe sotto, non hai bisogno di chiamare la modifica dal main del programma
//il timer simula solo la chiamata di quando arriva una nuova stringa
/*timer = new Timer();
timer.Interval = 5000;
timer.Tick += new EventHandler(timer_Tick);
listaWav = Directory.GetFiles(Application.StartupPath,"*.wav");
if (listaWav.Length > 0)
{
sp.SoundLocation = listaWav[index++];
sp.Play();
timer.Enabled = true;
timer.Start();
}*/
}
/*
void timer_Tick(object sender, EventArgs e)
{
if (index < listaWav.Length)
{
CambiaMusica(listaWav[index]);
}
else timer.Stop();
index++;
}
*/
//questo simula la modifca chiamata dalla ricezione della stringa
public void CambiaMusica(string path)
{
sp.Stop();
sp.SoundLocation = path;
sp.Play();
if (this.BackColor == Color.Black)
this.BackColor = Color.White;
else
this.BackColor = Color.Black;
}
}
}
nella program, dopo aver avviato il form, simulo con un timer la ricezione della stringa ogni 5 secondi, alla ricezione, quindi, nel metodo chiamato dal timer, chiamo il metodo del form che effettua la modifica, che, in questo caso, si tratta del cambio di musica e colore di sfondo, direttamente dalla program. Invece commentando le parti con asterico nella program, e tolgliendo i commenti nel pezzo dentro la form1, faccio in modo che la program avvii solo il form, e dopo sarà il form a fare tutto da solo (in questo caso simulando da dentro se stesso la logica che riceve la stringa).
chiaramente, se vuoi puoi postare il tuo codice, o magari mettere un link dove scaricarlo credo sia gradito (perlomeno a me) cosi si capisce meglio perchè agisci in questo modo.
P.S.
per provare il codice che ho postato dovresti mettere qualche file .wav nella cartella dell'eseguibile.