Jeg har en klasse der laver en selvstændig dll-fil, der bliver kladt delvist ind som egen Thread.
MoodLib.dll
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;
namespace MoodLib { public class Humør { private double i = 0;
#region IHumør Members
public void RunMood() { while (true) { this.mood = this.i - 0.1; progressBar3.invoke(new UpdateprogressBar3Callback(this.UpdateprogressBar3), GetMood());
Thread.Sleep(1); } } public int GetMood() { return int.Parse(this.i.ToString()); } } }
Form1
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.Threading; using MoodLib;
namespace LittlePetForm { public partial class Form1 : Form { private void UpdateprogressBar3(int i) { progressBar3.Value = i; }
public delegate void UpdateprogressBar3Callback(int i);
IHumør h = new Humør(); public Form1() { InitializeComponent(); Thread tMood = new Thread(new ThreadStart(h.RunMood)); } } }
Hvis tråden kun har 1 funktion (opdater mood, opdater progressbar), synes jeg at det er "ok" løsning.
Sig mig engang..
- Er det bare mig der ikke kan finde "mood"-variablen, eller eksisterer den ikke? Den er refereret her: "this.mood = this.i - 0.1;".. men skulle nok have været: "this.i = this.i - 0.1;"
- Starter "i" ikke bare ved "0", og går "0.1" ned ..? Rimeligt negativt "mood".. :-)
- Vil int.Parse ikke give en fejl når værdien er en double? Her burde man vel bruge Convert.ToInt32.. men det kan da også være at int.Parse virker..
Og til sidst:
Hvordan dælen laver man så'n en fin boks uden om koden, her på eksperten.dk?... jeg kan kun se:
"Tilladte BB-code-tags: [ b ]fed[ /b ] [ i ]kursiv[ /i ] [ u ]understreget[ /u ] [ img ]link til billede[ /img ]"
Det burde virke ja, men det er ikke nogen særlig pæn løsning, hvis det var tiltænkt at dll'en skulle kunne bruges i andre løsninger også.
Det ville vel netop være en god løsning, da man så selv bestemmer hvilken progressbar der skal opdateres.. så er det lige meget hvad den hedder hos dig (på din form), og DLL'en er ligeglad med navnet, bare den får en reference..
Nu har vi ikke fået megen information omkring bevæggrunden for at lave en dll med den ene funktion i. Hvis ikke den skal bruges til andre projekter eller platforme, så havde det alt andet lige været nemmere blot at lave den som en klasse i hovedprojektet. Du vil jo stadig have samme muligheder for at lave den trådbaseret dér, og det vil være nemmere (og pænere) at referere til progressbaren på den facon.
hm, så man kan ikke lave en forspørgelse fra .exe filen, til .dll filen, om hvad værdien er? tænkte på at det nok ville være mest korrekt, da .dll'en meget gerne skulle se objektivt på sagerne :)
Hvis du lader DLL'en opdatere GUI'en, bliver du nødt til at "låse" forholdet ("DLL'en stiller krav"), forstået på den måde, at hvis du bruger DLL'en et andet skal, så SKAL formen have en progressbar.
Hvad nu hvis der ikke skal være en progressbar, men bare en label der viser status?
Man kan jo også bare tilføje en "skal/skal ikke opdatere formens progressbar"-switch, for man sender til DLL'en..
Hvis DLL'en bare skal arbejde for sig selv, kan formen (via en tråd.. ellers kan låse den formen!) spørge DLL'ens GetMood, med et eller andet interval. Kravet for specifikke ting (forholdet mellem form og DLL) bliver mere åbent/løst.
Hvis intervallet afvikles via en timer, låser den ikke formen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.